POJ 2023 Choose Your Own Adventure(树形,dfs,简单题)
题意:
输入一个整数n,表示有n组测试数据,
每组第一行输入一个整数x表示该组测试一共有x页,接下来输入x行,每行表示一页,
每页或者以C开头(第一页都是以C开头),或者以E开头,中间用引号括起一段文字。
以C开头的末尾输入两个数字a,b表示该页完后可以跳转到第a页或第b页,
以E开头的末尾输入一个单词,或者是HAPPY或者是GRISLY(有且仅有一页以HAPPY结尾)。
现在要求你根据输入找出以第一页开头,以HAPPY结尾的路径,输出路径上每一页中间引号里面的内容,不包含引号。
思路:建立树,用dfs深搜。
要注意的是数据中可能会有死循环出现,会导致RE。。。
另外:本题读取句子可采用的方法:
cin.getline(page[j],258,'\"')
参考网址
http://hi.baidu.com/kskr/blog/item/cb00cc3deadf45c49f3d6279.html
#include <iostream>
#include <stdio.h>
#include <map>
#include <string.h>
#include <algorithm> const int maxn=;
using namespace std;
int t,n;
int endnum; //以HAPPY结尾的页数
int pri[maxn]; //前驱
bool ok; //标记是否已经找到路径
int vis[maxn]; //标记该页数是否被访问过 struct Page{
int mark;
char sentence[];
int len;
int son[]; //跳转的页码
char ending[];
bool flag; //flag为true表示该页是HAPPY
}page[maxn]; void dfs(int u){
if(ok)
return;
vis[u]=; //没用vis标记前,RE;后来网上查了,有人说数据中有循环,便加上了标记,结果WA,忘记输出STORY X了。。。
if(page[u].mark){
for(int i=;i<;i++){
int v=page[u].son[i];
if(!vis[v]){
pri[v]=u;
dfs(v);
}
}
}
else{
if(page[u].flag){
ok=true;
endnum=u;
}
}
}
int main()
{
char s[];
char c;
int len;
cin>>t;
for(int q=;q<=t;q++){
cout<<"STORY "<<q<<endl;
memset(pri,-,sizeof(pri));
memset(vis,,sizeof(vis));
cin>>n;
for(int i=;i<=n;i++){
scanf("%s",s);
page[i].mark=;
if(s[]=='C'){
page[i].mark=;
c=getchar();
while(c!='"')
c=getchar();
len=;
//读取双引号里的句子
while((c=getchar())!='"')
page[i].sentence[len++]=c;
page[i].len=len;
scanf("%d%d",&page[i].son[],&page[i].son[]);
}
else{
c=getchar();
while(c!='"')
c=getchar();
len=;
//读取双引号里的句子
while((c=getchar())!='"')
page[i].sentence[len++]=c;
page[i].len=len; scanf("%s",page[i].ending);
if(strcmp(page[i].ending,"HAPPY")==){
page[i].flag=true;
}
else{
page[i].flag=false;
}
}
}
pri[]=;
ok=false;
dfs();
int idx=;
int res[maxn];
res[idx++]=endnum;
//存储路径
while(pri[endnum]!=endnum){
res[idx++]=pri[endnum];
endnum=pri[endnum];
}
for(int i=idx-;i>=;i--){
for(int j=;j<page[res[i]].len;j++){
cout<<page[res[i]].sentence[j];
}
cout<<endl;
}
}
return ;
}
POJ 2023 Choose Your Own Adventure(树形,dfs,简单题)的更多相关文章
- POJ 2342 &&HDU 1520 Anniversary party 树形DP 水题
一个公司的职员是分级制度的,所有员工刚好是一个树形结构,现在公司要举办一个聚会,邀请部分职员来参加. 要求: 1.为了聚会有趣,若邀请了一个职员,则该职员的直接上级(即父节点)和直接下级(即儿子节点) ...
- test1.A[【dfs简单题】
Test1.A Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 sdut 2274:http://acm.sdut.edu.cn/ ...
- LeetCode Generate Parentheses 构造括号串(DFS简单题)
题意: 产生n对合法括号的所有组合,用vector<string>返回. 思路: 递归和迭代都可以产生.复杂度都可以为O(2n*合法的括号组合数),即每次产生出的括号序列都保证是合法的. ...
- hdu 1561 The more, The Better 背包型树形DP 简单题
The more, The Better Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- Curling 2.0(DFS简单题)
题目链接: https://vjudge.net/problem/POJ-3009 题目描述: On Planet MM-21, after their Olympic games this year ...
- HDU1241&POJ2386 dfs简单题
2道题目都差不多,就是问和相邻所有点都有相同数据相连的作为一个联通快,问有多少个连通块 因为最近对搜索题目很是畏惧,总是需要看别人代码才能上手,就先拿这两道简单的dfs题目来练练手,顺便理一理dfs的 ...
- POJ 3370 Halloween treats( 鸽巢原理简单题 )
链接:传送门 题意:万圣节到了,有 c 个小朋友向 n 个住户要糖果,根据以往的经验,第i个住户会给他们a[ i ]颗糖果,但是为了和谐起见,小朋友们决定要来的糖果要能平分,所以他们只会选择一部分住户 ...
- POJ 1155 TELE 背包型树形DP 经典题
由电视台,中转站,和用户的电视组成的体系刚好是一棵树 n个节点,编号分别为1~n,1是电视台中心,2~n-m是中转站,n-m+1~n是用户,1为root 现在节点1准备转播一场比赛,已知从一个节点传送 ...
- POJ 2342 树形DP入门题
有一个大学的庆典晚会,想邀请一些在大学任职的人来參加,每一个人有自己的搞笑值,可是如今遇到一个问题就是假设两个人之间有直接的上下级关系,那么他们中仅仅能有一个来參加,求请来一部分人之后,搞笑值的最大是 ...
随机推荐
- 自学Python一 迷茫中的开端!
有心学习一下Python,多门技术多条路啊.经历了找教程,看代码,写demo,这东西入门容易精通难啊!又因为请了两周婚假彻底忘光光.想了想自己还是边复习边写点什么东西吧.很多技术,新东西都是看了n多, ...
- Java从入门到精通——调错篇之SVN 出现 Loced错误
我在更新SVN的时候同时并打开了在这SVN上的一个文档结果导致了我更新的时候提示Loced错误 解决方法:出现这个问题后使用"清理"功能,如果还不行,就直接到上一级目录,再执行&q ...
- DB2查询结果显示n行
在SQLserver中语法是这样的:select top n * from staff ,即可查询显示n行数据 但是在DB2中语法是这样的,感觉比较接近英语. select * from STAFF ...
- Linux下如何将数据库脚本文件从sh格式变为sql格式
在从事软件开发的过程中,经常会涉及到在Linux下将数据库脚本文件从sh格式变为sql格式的问题.本文以一个实际的脚本文件为例,说明格式转换的过程. 1. sh文件内容 本文中的文件名为 ...
- 深入浅出const
§通常,如果一个对象通过引用方式传到函数f中,而函数f又不会通过修改对象的数据成员的值改变该对象的状态,那么,我们最好将f的参数标记为const,这样可以预防对参数的误写,同时有些编译器还可对这种情况 ...
- centos php-fpm nginx配置
移除旧的软件包:yum remove httpd* php* 安装:yum install php php-fpm yum install php-gd php-mysql php-mbstring ...
- 011--VS2013 C++ 斜角地图贴图
准备好的图片 //全局变量HDC mdc;HBITMAP fullmap;//声明位图对象,在初始化函数中完成的斜角地图会保存在这个位图中const int rows = 10, cols = 10; ...
- asp.net mvc 错误路由默认配置
问题描述:默认情况下mvc已经将路由参数设置配置好了,这里就不在讲解,请到园子搜索,有很多这方面相关的文章.这里讲述的是,一个MVC项目中,我们输入一个错误的URL,或者根本不存在的URL,如:htt ...
- linux 编译C应用程序的Makefile
CC=arm-linux-gcctarget=testsource=test.call: $(target)$(target): $(source) $(CC) -o $@ $<.PHONY: ...
- Implementation Documentation[转]
原文地址:http://prasanna-adf.blogspot.tw/2009/04/implementation-documentation.html Following are the lis ...