Advertisement
Guest User

Untitled

a guest
Jul 26th, 2017
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.76 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. map <pair<int, int>, bool> mp;
  5. vector <int> tree[20005];
  6. int indegree[20005], outdegree[20005];
  7.  
  8. int traverse(int node)
  9. {
  10. //cout<<node<<' ';
  11. int s = tree[node].size();
  12. for(int i=0; i<s; i++)
  13. {
  14. int nextnode = tree[node][i];
  15. pair<int, int> p;
  16. p.first = node;
  17. p.second = nextnode;
  18. if(mp[p]==0)
  19. {
  20. mp[p]=1;
  21. outdegree[nextnode]++;
  22. indegree[node]++;
  23. int cnt = traverse(nextnode);
  24. return cnt + 1;
  25. }
  26. }
  27. return 1;
  28. }
  29.  
  30. int main()
  31. {
  32. int cases, t=0, n, u, v;
  33. scanf("%d", &cases);
  34. while(t++<cases)
  35. {
  36. scanf("%d", &n);
  37. memset(indegree, 0, sizeof indegree);
  38. memset(outdegree, 0, sizeof outdegree);
  39. mp.clear();
  40. for(int i=1; i<n; i++)
  41. {
  42. scanf("%d %d", &u, &v);
  43. tree[u].push_back(v);
  44. indegree[v]++;
  45. outdegree[u]++;
  46. }
  47. int path = 0;
  48. int cnt = 0;
  49. int stop = 0;
  50. while(cnt!=(n-1) && stop<10)
  51. {
  52. stop++;
  53. for(int i=0; i<n; i++)
  54. {
  55. if(indegree[i]!=outdegree[i])
  56. {
  57. //cout<<'\n'<<i<<' '<<indegree[i]<<' '<<outdegree[i];
  58. //cout<<"\nTRAVERSE: ";
  59. int tmpcnt = traverse(i)-1;
  60. cnt+=tmpcnt;
  61. if(tmpcnt) path++;
  62. //cout<<"\n"<<cnt;
  63. //if(cnt==(n-1)) break;
  64. }
  65. }
  66. }
  67. for(int i=0; i<n; i++) tree[i].clear();
  68. printf("Case %d: %d\n", t, path);
  69. }
  70.  
  71. return 0;
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement