範例程式碼 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";
    }
}