UVa 12442 Forwarding Emails

#include <iostream>
#include <vector>
#include <bitset>
using namespace std;
vector<int> a(50001),sum(50001,-1);
bitset<50001> vis;
int dfs(int u){
    if(vis[u])return 1;
    vis[u]=1;
    sum[u]=1+dfs(a[u]);
    vis[u]=0;
    return sum[u];
}
int t,n,c=0;
int main(){
    cin>>t;
    while(c++<t){
        cin>>n;
        vis.reset();
        for(int i=1;i<=n;i++){
            int x,y;
            cin>>x>>y;
            a[x]=y;
            sum[x]=0;
        }
        int ans=0,mx=0;
        for(int i=1;i<=n;i++){
            if(!sum[i])dfs(i);
            if(sum[i]>mx)
                mx=sum[i],ans=i;
        }
        cout<<"Case "<<c<<": "<<ans<<endl;
    }
}

Comments