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入门题
有一个大学的庆典晚会,想邀请一些在大学任职的人来參加,每一个人有自己的搞笑值,可是如今遇到一个问题就是假设两个人之间有直接的上下级关系,那么他们中仅仅能有一个来參加,求请来一部分人之后,搞笑值的最大是 ...
随机推荐
- 迭代器、泛型和增强For
Iterator hasNext next Iterator 迭代器 Collection提供了一个遍历集合的通用方式,迭代器(Iterator). 获取迭代器的方式是使用Collection定义的 ...
- Android-----第三方 ImageLoader 的简单配置和使用
ImageLoader 的简单使用配置,最好是将配置信息放到application里面,这样我们就不需要每次使用都需要配置了 1.首先我们得有一个包 2.简单的配置信息 //显示图片的配置 Displ ...
- linux之mysqlimport的哪些变态事儿
mysqlimport是MySQL导入数据的工具,高效易用. 但掌握不透彻就会有一些变态事情.mysqlimport --host='laswebapp.mdb.game.yy.com' --port ...
- golang的goroutine与channel
Golang的goroutine是非抢占式的, 令人相当蛋疼! 有痛不能呻吟...只能配合channel在各goroutine之间传递信号来实现抢占式, 而这形成了golang最灵活与最具性能的核心. ...
- OSGi 对软件复杂度的影响
出自 深度理解 osgi equinox 原理 1.2.1 OSGi 能让软件开发变得更容易吗 不可否认,OSGi 的入门门槛在 Java 众多技术中算是比较高的,相对陡峭的学习曲线会 为第一次使用 ...
- mysql存储过程执行权限问题
tags: mysql PROCEDURE 存储过程 definer SECURITY 权限 以下存储过程,限定了DEFINER为root,也就是root之外的账户是无法调用这个存储过程的. 1 2 ...
- IOS判断网络环境
https://developer.apple.com/library/ios/#samplecode/Reachability/Introduction/Intro.html 我下载的是vertio ...
- 【转载】about slack
About Slack slack is the difference b/w the REQUIRED TIME and the ARRIVAL TIME. 1.WHAT IS SLACK WITH ...
- Delphi 递归搜索.SVN文件夹并“处理”
实在是没有想到删除.SVN文件夹是件这么痛苦的事情,最近在整理公司历史资料文件,粗略统计一下600G左右,本想一次提交到服务器上省事,没想到啊没想到,传输中途程序崩掉了,本地文件夹剩下一大堆.svn文 ...
- 启动级别:init 0,1,2,3,4,5,6
这是个很久的知识点了,只是自己一直都迷迷糊糊的,今天在翻出来好好理解下.. 0:停机 1:单用户形式,只root进行维护 2:多用户,不能使用net file system 3:完全多用户 5:图形化 ...