标签:
poj1144:
模板题,不过输入的方式真的真的是非常非常蛋疼。。。记住了。。。
1 #include<cstdio> 2 #include<vector> 3 #include<cstring> 4 #include<iostream> 5 #include<algorithm> 6 using namespace std; 7 #define rep(i,n) for(int i=1;i<=n;i++) 8 #define clr(x,c) memset(x,c,sizeof(x)) 9 const int nmax=105; 10 int dfn[nmax],low[nmax],iscut[nmax],n,dfn_clock; 11 vector<int>f[nmax]; 12 int get(char *ch){ 13 int x=0; 14 for(int i=0;ch[i];i++) 15 x=x*10+ch[i]-‘0‘; 16 return x; 17 } 18 int dfs(int u,int fa){ 19 low[u]=dfn[u]=++dfn_clock; 20 int child=0; 21 for(int i=0;i<f[u].size();i++){ 22 int v=f[u][i]; 23 if(!dfn[v]){ 24 child++; 25 dfs(v,u); 26 low[u]=min(low[u],low[v]); 27 if(low[v]>=dfn[u]) 28 iscut[u]=1; 29 } 30 else if(dfn[v]<dfn[u]&&v!=fa) 31 low[u]=min(low[u],dfn[v]); 32 } 33 if(fa<0&&child==1) iscut[u]=0; 34 return low[u]; 35 36 } 37 int main(){ 38 while(scanf("%d",&n)&&n){ 39 dfn_clock=0; 40 clr(dfn,0);clr(iscut,0); 41 rep(i,n) f[i].clear(); 42 char ch[10]; 43 while(scanf("%s",ch)==1){ 44 if(ch[0]==‘0‘) break; 45 int u=get(ch); 46 while(scanf("%s",ch)==1){ 47 int v=get(ch); 48 f[u].push_back(v); 49 f[v].push_back(u); 50 char t=getchar(); 51 if(t==‘\n‘) break; 52 } 53 } 54 dfs(1,-1); 55 int ans=0; 56 rep(i,n) 57 if(iscut[i]) 58 ans++; 59 printf("%d\n",ans); 60 } 61 return 0; 62 }
标签:
原文地址:http://www.cnblogs.com/20003238wzc--/p/4851899.html