标签:
求有几个割点。数据比较水,用了朴素方法。。。
#include<cstdio> #include<cstring> #include<cmath> #include<vector> #include<algorithm> using namespace std; char s[1000000]; int n,u,v,tot,len,sum; const int INF=0x7FFFFFFF; const int MAXN=105; vector<int>G[MAXN]; int fail[MAXN],flag[MAXN]; void DFS(int now) { int i; for(i=0; i<G[now].size(); i++) { if(!flag[G[now][i]]&&!fail[G[now][i]]) { flag[G[now][i]]=1; DFS(G[now][i]); } } } int main() { int i,ii; while(~scanf("%d",&n)&&n) { for(i=0; i<=n; i++) G[i].clear(); memset(flag,0,sizeof(flag)); memset(fail,0,sizeof(fail)); while(gets(s)) { if(strcmp(s,"0")==0) break; len=strlen(s); u=INF; sum=0; for(i=0; i<=len; i++) { if(s[i]==‘ ‘||s[i]==‘\0‘) { if(u==INF) u=sum,sum=0; else { v=sum,sum=0; G[u].push_back(v); G[v].push_back(u); } } else sum=sum*10+s[i]-‘0‘; } } memset(fail,0,sizeof(fail)); int AAA,ans=0; for(ii=1; ii<=n; ii++) { fail[ii]=1; AAA=0; memset(flag,0,sizeof(flag)); for(i=1; i<=n; i++) { if(fail[i]) continue; if(!flag[i]) { flag[i]=1; DFS(i); AAA++; } } if(AAA!=1) ans++; fail[ii]=0; } printf("%d\n",ans); } return 0; }
标签:
原文地址:http://www.cnblogs.com/zufezzt/p/4694433.html