Advertisement
Saleh127

UVA 796 - Bridge finding

Aug 8th, 2021
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.62 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4. #define test int tt; cin>>tt; for(int cs=1;cs<=tt;cs++)
  5. vector<ll>g[100105];
  6. vector<pair<ll,ll>>ans;
  7. ll low[100105],in[100105],timer;
  8. bool v[100105];
  9.  
  10. void dfs(ll node,ll p)
  11. {
  12. v[node]=1;
  13. low[node]=in[node]=timer++;
  14.  
  15. for(auto child:g[node])
  16. {
  17. if(child==p) continue;
  18.  
  19. if(v[child])
  20. {
  21. low[node]=min(low[node],in[child]);
  22. }
  23. else
  24. {
  25. dfs(child,node);
  26.  
  27. low[node]=min(low[node],low[child]);
  28.  
  29. if(low[child]>in[node])
  30. {
  31. ans.push_back({min(node,child),max(node,child)});
  32. }
  33. }
  34. }
  35. }
  36.  
  37.  
  38. int main()
  39. {
  40. ios_base::sync_with_stdio(0);
  41. cin.tie(0);
  42. cout.tie(0);
  43.  
  44. ll x,n,m,i,j,k,l;
  45. char cc;
  46.  
  47. while(cin>>n)
  48. {
  49. ans.clear();
  50.  
  51. for(i=0;i<n+5;i++)
  52. {
  53. g[i].clear();
  54. v[i]=0;
  55. low[i]=-1;
  56. in[i]=-1;
  57. }
  58.  
  59. for(i=0; i<n; i++)
  60. {
  61. cin>>x;
  62. cin>>cc>>m>>cc;
  63. while(m--)
  64. {
  65. cin>>k;
  66. g[x].push_back(k);
  67. }
  68.  
  69. }
  70. for(i=0; i<n; i++)
  71. {
  72. if(v[i]==0)
  73. {
  74. dfs(i,-1);
  75. }
  76. }
  77.  
  78. sort(ans.begin(),ans.end());
  79.  
  80. cout<<ans.size()<<" critical links"<<endl;
  81. for(auto dd:ans)
  82. {
  83. cout<<dd.first<<" - "<<dd.second<<endl;
  84. }
  85. cout<<endl;
  86. }
  87.  
  88.  
  89. return 0;
  90. }
  91.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement