【图论】【RQNOJ】心许的回忆[Special Judge]
2010-07-13 17:33
232 查看
题目描述
题目背景话说仙剑奇侠传四故事发生之时,勇气亲眼目睹琼华陨落,又见天河射下琼华,化去天火。着实为之感动。他自叹不如,因而决定归隐园田。
不过他在人间人生地不熟,为了找到一个落脚之地,他找到了同为仙兽的王蓬絮和花楹,两位MM在仔细的讨论商议之后决定——带勇气去蜀山!
经过一番周折,勇气终于在蜀山安家落户,住在原先独孤宇云的房间里(他已经当掌门去了),每天同其他弟子一同修道。
大约 10 年过后,仙盟开始举办一年一度的仙迷聚会,当然要邀请一些仙剑中的著名人物登场,这次就邀请了这三位仙兽。但不想,麻烦就因此开始……
题目叙述
仙盟的邀请函上的地址只写到北京某某某地,蓬絮和花楹哪里知道是什么地方?她们找来了勇气,勇气发觉他三百年之前去过那里,但是因为过了太久,已经记不清楚了。但是两位MM仙兽当然不肯放过这一展露头角的机会,在她们的死磨烂缠之后,勇气终于决定要想办法记起之前这一段回忆。
他把思绪整理了一下,发现过去那一段回忆是有很多情节交织在一起。他把所有的记忆划分成 n 个片断,他把去北京的记忆编号为 1,其他按照 2-n 的顺序依次编号。他发现,很多记忆的回忆之间是存在一先后关系的,比如说,你在回忆使用法术之前必须先回忆清楚什么东西叫法术。当然,同一样片断只需要回忆一次就可以了,比如看书和写字都要求识字,但想要看书和写字只需要回忆一次识字的知识就行了。
于是他把所有的这些关系写成了一张表,现在,他需要找出一种合适的方案来回忆起去北京的过去。你可以帮帮他吗?
数据范围
对于全部的数据,n <= 10。
输入格式
第一行一个数 n,表示有 n 个记忆片断,其中第一段为去北京的记忆。第二行至第 n + 1 行,表示这 n 个片断的先后次序的表。第 i + 1 行的第一个数字为 c[i],表示在片断 i 被回忆之前必须要回忆过 c[i] 个片断,后面依次列出这 c[i] 个片断的编号,每两个数字间由一个空格隔开。
文件中出现的数字均为正整数,且没有多余的空行和空格。
输出格式
一行,依次输出回忆的顺序,两个数之间由一个空格隔开。行首和行尾不要有多余的空格。如果有多种可能的方案,任意输出一种即可。如果不存在任何方案,输出“What a poor boy!”。
样例输入
#include<stdio.h> bool v[20][20]; int pre_num[20],nex_num[20],ans[100]; int n,remain,len; int main() { scanf("%d",&n); for (int i=1;i<=n;++i) { int t; scanf("%d",&t); int tt; for (int j=1;j<=t;++j) { scanf("%d",&tt); ++pre_num[i]; ++nex_num[tt]; v[i][tt]=true; } } remain=n; while (1) { if (remain==1&&pre_num[1]==0) break; int k=0; for (int i=2;i<=n;++i) if (pre_num[i]==0) { k=i; break; } if (k==0) break; pre_num[k]=-1; for (int i=1;i<=n;++i) if (v[i][k]) { --pre_num[i]; v[i][k]=0; } ans[++len]=k; --remain; } for (int i=1;i<=len;++i) printf("%d ",ans[i]); printf("1/n"); return 0; }
相关文章推荐
- 【图论】【RQNOJ】造路行动
- 【RQNOJ】【图论】发明测试数据
- 【图论】【RQNOJ】产生数
- 【图论】【RQNOJ】学生运输
- 【RQNOJ】【图论】宿命的P.S.S
- 【图论】【RQNOJ】恐怖分子
- 【图论】【RQNOJ】校园迷宫
- 【图论】【RQNOJ】小天狼星的访问
- 【图论】【RQNOJ】寻找代表人
- 【图论】【RQNOJ】门票系统
- 【图论】【RQNOJ】智捅马蜂窝
- 【图论】【RQNOJ】拜年
- 【图论】【RQNOJ】拦截匪徒
- [回忆杀] 图论进阶(图论初步被我吃,反正没人看)(poj 1052)
- 【图论】【RQNOJ】最优乘车
- 图论中的一个问题
- 腾讯14研发笔试回忆
- rqnoj-217-拦截导弹-最长不上升子序列以及不上升子序列的个数
- 图论 最小生成树 Prim Kruskal POJ 3255 POJ 3723 POJ 3169
- 编程回忆之java回忆(与mysql的连接)