#include "message.h" #include "sabotaz.h" #include <bits/stdc++.h> using namespace std; int r,T,t[200100],l[200100]; vector<int> g[200100]; void dfs(int i, int p) { l[i]=t[i]=++T; for (int j=0; j<g[i].size(); j++) { int k=g[i][j]; if (k==p) continue; if (t[k]==0) { dfs(k,i); if (l[k]>t[i]) r++; l[i]=min(l[i],l[k]); } else l[i]=min(l[i],t[k]); } } int main() { int N=NumberOfNodes(); int M=MyNodeId(); if (M==0) { int n=NumberOfIsles(); int m=NumberOfBridges(); while (m--) { int x=BridgeEndA(m); int y=BridgeEndB(m); if (x==y) continue; g[x].push_back(y); g[y].push_back(x); } dfs(1,0); cout<<r<<'\n'; } return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | #include "message.h" #include "sabotaz.h" #include <bits/stdc++.h> using namespace std; int r,T,t[200100],l[200100]; vector<int> g[200100]; void dfs(int i, int p) { l[i]=t[i]=++T; for (int j=0; j<g[i].size(); j++) { int k=g[i][j]; if (k==p) continue; if (t[k]==0) { dfs(k,i); if (l[k]>t[i]) r++; l[i]=min(l[i],l[k]); } else l[i]=min(l[i],t[k]); } } int main() { int N=NumberOfNodes(); int M=MyNodeId(); if (M==0) { int n=NumberOfIsles(); int m=NumberOfBridges(); while (m--) { int x=BridgeEndA(m); int y=BridgeEndB(m); if (x==y) continue; g[x].push_back(y); g[y].push_back(x); } dfs(1,0); cout<<r<<'\n'; } return 0; } |