灌籃高手
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秒......怨念中