PKU : 2491 - Scavenger Hunt
問題概要
http://poj.org/problem?id=2491
あるスタート地点からゴール地点まで, S個の地点を経由して歩きました.
そのときの記録が, S-1個, 順番がバラバラに与えられるので, 正しい順番に並び替えてください.
アルゴリズム
スタート地点は, 簡単に決めることができます.
S-1個の右側に出てこなかった文字列がスタート地点です.
例えば, 以下の例の場合, 右側に出てこない文字列 VideoGameがスタート地点になります.
3 左側 右側 Toilet Hospital VideoGame Toilet
あとは, スタート地点から順番にS個の文字列を辿るだけで解けます.
プログラム
int main(){ int T; char buff[1024]; scanf("%d",&T); for(int SET=1;SET<=T;SET++){ printf("Scenario #%d:\n",SET); int S; scanf("%d",&S); map<string,string> route; map<string,int> cnt; for(int i=0;i<S-1;i++){ string from,to; scanf("%s",buff); from = string(buff); scanf("%s",buff); to = string(buff); route[from] = to; cnt[from] = 0; cnt[to]++; } string now; for(map<string,int>::iterator iter=cnt.begin();;iter++){ if((iter->second) == 0){ now = (iter->first); break; } } puts(now.c_str()); for(int i=0;i<S-1;i++){ now = route[now]; puts(now.c_str()); } printf("\n"); } }