#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <queue>
#include <string.h>
#include <stack>
#include <vector>
using namespace std;
const int maxn=110;
int n;
vector<int> g[110];
int son=0,d_cnt=0;
int cut[110];
int low[110],dfn[110],vis[110];
void dfs(int u)
{
low[u] = dfn[u] = ++d_cnt;
vis[u]=1;
for(int i=0;i<g[u].size();++i)
{
int v=g[u][i];
if(!vis[v])
{
dfs(v);
low[u]=min(low[u],low[v]);
if(low[v]>=dfn[u] && u!=1)
{
cut[u]++;
}
else if(u==1)
{
son++;
}
}
else low[u]=min(low[u],dfn[v]);
}
}
void tarjan()
{
memset(low,0,sizeof(low));
memset(dfn,0,sizeof(dfn));
memset(cut,0,sizeof(cut));
memset(vis,0,sizeof(vis));
son=0; d_cnt=0;
dfs(1);
int ans=0;
for(int i=2;i<=n;++i) if(cut[i]) ans++;
if(son>=2) ans++;
printf("%d\n",ans);
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
if(n==0) break;
for(int i=1;i<=n;++i) g[i].clear();
int u,v;
while(scanf("%d",&u)!=EOF)
{
if(u==0) break;
while(getchar()!='\n')
{
scanf("%d",&v);
g[u].push_back(v);
g[v].push_back(u);
}
}
tarjan();
}
return 0;
}
割点
最新推荐文章于 2020-11-10 16:05:11 发布