灌篮高手
tur.exe/tur.in/tur.out
题意描述:
小明所在的篮球俱乐部共有N位灌篮高手(包括他自己),编号为1到N。他们之间总是不断地进行着挑战。每一次挑战都是两个人单挑,其中某个人获胜。设已经进行了M场挑战,并且每场挑战的结果都已经公布。现在进行一场超级总决赛,共进行(N-1)场淘汰赛以决出最强的灌篮高手。在这场总决赛中,a能胜b当且仅当在那M场挑战中a胜过b或者a根本没与b交手过。聪明的你也许已经发现,决赛的场次安排能够改变最终的冠军归属。现在要你求出所有可能成为冠军的灌篮高手。
输入文件(tur.in):
第一行有一个数N(1<=N<=100,000)。
以后N行中,第i行第一个数为 bi, 即在那M场比赛中i胜过的人的个数,后面有bi个按升序排列的数字(其中不可能有i),即i胜过的人的编号。
数据保证Σbi(即M)<=1,000,000
输出文件(tur.out):
仅有一行,第一个数ge为所有可能成为冠军的人的个数,后面ge个数按升序排列,表示可能成为冠军的人的编号。相邻的数字间用一个空格隔开。不要有多余的空格。
输入样例:
4
2 2 3
0
1 2
1 2
输出样例:
3 1 3 4
模拟打擂台的过程,用N*E的复杂度找出第一个可能的获胜者,然后用类似SPFA的方法找出可能赢他们人,扩展到答案里。
这样的打裸肯定坑爹也过不来哦,用一个链表把所有的可能获胜的人串起来,然后一旦他成为获选的人,就将它删去,(实际上就是LZN树的思想,降低常数),这样N越来越小,最后当然跑得出来。
写丑了,居然比xqz要慢0.02秒......怨念中