Advertisement
HmHimu

BRIDGE

Jul 20th, 2017
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.22 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. using namespace std;
  4. char color[100001];
  5. int pre[100001];
  6. int low[100001];
  7. int d[100001];
  8. int t=0;
  9. map<int,bool>points;
  10. map<pair<int,int>,bool>jerin;
  11. void dfs_visit(list<int>*adj,int source)
  12. {
  13. d[source]=++t;
  14. low[source]=d[source];
  15. color[source]='g';
  16.  
  17. for(list<int>::iterator it=adj[source].begin();it!=adj[source].end();++it)
  18. {
  19.  
  20. if(color[*it]=='w')
  21. {
  22. pre[*it]=source;
  23. dfs_visit(adj,*it);
  24. if(low[*it]>=d[source])
  25. {
  26. points[source]=1;
  27. }
  28. if(low[*it]>d[source])
  29. {
  30. if(*it>source){
  31. if(jerin[make_pair(source,*it)]==0)
  32. {
  33. jerin[make_pair(source,*it)]=1;
  34. }
  35. }
  36. else
  37. if(jerin[make_pair(*it,source)]==0)
  38. {
  39. jerin[make_pair(*it,source)]=1;
  40. }
  41. }
  42. if(low[*it]<low[source])
  43. {
  44.  
  45. low[source]=low[*it];
  46. }
  47. }
  48. else if(color[*it]=='g' && pre[source]!=*it)
  49. {
  50. if(d[*it]<low[source])
  51. {
  52. low[source]=d[*it];
  53. }
  54. }
  55. }
  56. color[source]='b';
  57. }
  58. void dfs(list<int>*adj,int node)
  59. {
  60. for(int i=0;i<=node;i++)
  61. {
  62. pre[i]=-1;
  63. color[i]='w';
  64. low[i]=-1;
  65. d[i]=0;
  66. }
  67. for(int i=0;i<=node;i++)
  68. {
  69. if(color[i]=='w')
  70. {
  71. dfs_visit(adj,i);
  72. }
  73. }
  74. }
  75. int main()
  76. {
  77.  
  78. // int case1;
  79. // cin>>case1;
  80. // for(int ii=1;ii<=case1;ii++)
  81. // {
  82. int node,edge;
  83. cout<<"input node numbers : ";
  84. cin>>node;
  85. cout<<"input edge numbers : ";
  86. cin>>edge;
  87. list<int>adj[node+1];
  88. t=0;
  89. map<pair<int,int>,bool>vis;
  90. for(int i=1;i<=edge;i++)
  91. {
  92. cout<<"edge "<<i<<" : ";
  93. int u,y,k,z=1,e=0;
  94. scanf("%d %d", &u, &k);
  95. adj[u].push_back(k);
  96. adj[k].push_back(u);
  97.  
  98. }
  99.  
  100. // for(int yy=1;yy<=k;yy++)
  101. // {
  102. // int r,rr;
  103. // scanf("%d",&rr);
  104. // int x=u;
  105. // int y=rr;
  106. // if(u>rr){
  107. // x=rr;
  108. // y=u;
  109. // }
  110. // if(vis[make_pair(x,y)]==0)
  111. // {
  112. // adj[x].push_back(y);
  113. // adj[y].push_back(x);
  114. // vis[make_pair(x,y)]=1;
  115. // }
  116. // }
  117.  
  118. dfs(adj,node);
  119. map<pair<int,int>,bool>::iterator rit,rit1;
  120. rit=jerin.begin();
  121. rit1=rit;
  122. //printf("Case %d:",ii);
  123. cout<<endl<<jerin.size()<<" articulation bridze\n";
  124. for(rit1=jerin.begin();rit1!=jerin.end();++rit1)
  125. {
  126. cout<<rit1->first.first<<" - "<<rit1->first.second<<endl;;
  127. }
  128. jerin=std::map<pair<int,int>,bool>();
  129. //vis=std::map<pair<int,int>,bool>();
  130.  
  131. //}
  132. return 0;
  133. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement