hoj1098NetWork求割点数目
来源:互联网 发布:手机怎么申请淘宝小号 编辑:程序博客网 时间:2024/06/03 15:12
#include <iostream>#include <cstdio>#include <cstring>using namespace std;#define X 120int map[X][X],dfn[X],low[X],ans[X],n,m,depth;void init(){ memset(map,0,sizeof(map)); memset(dfn,0,sizeof(dfn)); memset(low,0,sizeof(low)); memset(ans,0,sizeof(ans)); depth = 0;}void dfs(int v){ dfn[v]=low[v]=++depth; for(int i=1; i<=n; i++) { if(map[v][i]==1) { map[v][i]=map[i][v]=2; if(!dfn[i]) { dfs(i); low[v]=min(low[v],low[i]); if(low[i]>=dfn[v]) ans[v]++; } else low[v]=min(low[v],dfn[i]); } }}int main(){ int x,y; while(cin>>n,n) { init(); while(cin>>x,x) { while(getchar()!='\n') { cin>>y; map[x][y]=map[y][x]=1; } } dfs(1); ans[1]--; int cnt=0; for(int i=1; i<=n; i++) if(ans[i]>0)cnt++; cout<<cnt<<endl; } return 0;}