範例程式碼 uva12442
//uva12442
#include <iostream>
#include <vector>
using namespace std;
vector<int> sent;
vector<bool> check, sum;
int times;
void dfs(int num) {
++times;
sum[num] = check[num] = true;
if (!check[sent[num]]) dfs(sent[num]);
}
int main() {
int kase, n;
cin >> kase;
for (int i = 0; i < kase; ++i) {
cin >> n;
sent.assign(n + 1, -1);
sum.assign(n + 1, false);
for (int j = 0, a, b; j < n; ++j) cin >> a >> b, sent[a] = b;
int ftimes = 1;
int fnum = sent[0];
for (int j = 1; j <= n; ++j)
if (!sum[j]) {
check.assign(n + 1, false);
check[j] = true;
times = 1;
dfs(sent[j]);
if (times > ftimes || (times == ftimes && j < fnum))
fnum = j, ftimes = times;
}
cout << "Case " << i + 1 << ": " << fnum << "\n";
}
}