Advertisement
Pabon_SEC

Forwarding Emails

May 26th, 2016
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.59 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. int dp[50005];
  6.  
  7. vector<int>graph[50005];
  8.  
  9. bool color[50005],cycle;
  10.  
  11. int node;
  12.  
  13. int dfs(int u)
  14. {
  15.     int len = graph[u].size(),i;
  16.  
  17.     if(dp[u]!=-1)
  18.         return dp[u];
  19.  
  20.     color[u] = true;
  21.  
  22.     dp[u] = 1;
  23.  
  24.     for(i=0; i<len; i++)
  25.     {
  26.         if(!color[graph[u][i]])
  27.         {
  28.             dp[u]+=dfs(graph[u][i]);
  29.         }
  30.         else
  31.         {
  32.             cycle = true;
  33.  
  34.             node = graph[u][i];
  35.         }
  36.     }
  37.  
  38.     color[u] = false;
  39.  
  40.     return dp[u];
  41. }
  42.  
  43. void again_dfs(int u)
  44. {
  45.     int len = graph[u].size(),i;
  46.  
  47.     color[u] = true;
  48.  
  49.     dp[u] = dp[node];
  50.  
  51.     for(i=0; i<len; i++)
  52.     {
  53.         if(!color[graph[u][i]])
  54.         {
  55.             again_dfs(graph[u][i]);
  56.         }
  57.     }
  58.  
  59.     color[u] = false;
  60. }
  61.  
  62. int main()
  63. {
  64.     int tc,n,test,i,u,v,martian,mx;
  65.  
  66.     scanf("%d",&test);
  67.  
  68.     for(tc=1; tc<=test; tc++)
  69.     {
  70.         scanf("%d",&n);
  71.  
  72.         for(i=1; i<=n; i++)
  73.         {
  74.             scanf("%d%d",&u,&v);
  75.  
  76.             graph[u].push_back(v);
  77.         }
  78.  
  79.         memset(dp,-1,sizeof dp);
  80.  
  81.         mx = -1;
  82.  
  83.         for(i=1; i<=n; i++)
  84.         {
  85.             cycle = false;
  86.  
  87.             dfs(i);
  88.  
  89.             if(cycle)
  90.             {
  91.                 again_dfs(node);
  92.             }
  93.  
  94.             if(mx<dp[i])
  95.             {
  96.                 mx = dp[i];
  97.  
  98.                 martian = i;
  99.             }
  100.         }
  101.  
  102.         printf("Case %d: %d\n",tc,martian);
  103.  
  104.         for(i=1; i<=n; i++)
  105.         {
  106.             graph[i].clear();
  107.         }
  108.     }
  109.  
  110.     return 0;
  111. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement