#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; } |
English