POJ1144
筱柒Littleseven
QQ:3534947775
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int MAXN=1100;
int n,cnt,tar_tot,root,cut[MAXN],deep[MAXN],low[MAXN],head[MAXN],vis[MAXN];
struct Edge{ int to,nex; }e[MAXN<<1];
void setup()
{
cnt=0;
memset(deep, 0, sizeof deep);
memset(low, 0, sizeof low);
memset(vis, 0, sizeof vis);
memset(cut, 0, sizeof cut);
memset(head, -1, sizeof head);
}
void add(int x,int y)
{
e[cnt].to=y;
e[cnt].nex=head[x];
head[x]=cnt++;
}
void tarjan(int x,int fa)
{
int tar_son=0; vis[x]=1; deep[x]=low[x]=++tar_tot;
for(int i=head[x]; i!=-1; i=e[i].nex)
{
int tmp=e[i].to;
if(vis[tmp]==0)
{
tarjan(tmp, x); tar_son++;
low[x]=min(low[x], low[tmp]);
if( (x==root && tar_son>1) || (x!=root && deep[x]<=low[tmp]) )
cut[x]=1;
}
if(vis[tmp]==1) low[x]=min(low[x],deep[tmp]);
}
vis[x]=2;
}
int main()
{
while(cin>>n && n)
{
setup();
int u,v;
while(cin>>u && u)
{
while(getchar()!='\n'){ cin>>v; add(u,v); add(v,u); }
}
root=1; tarjan(root,-1); int ans=0;
for(int i=1; i<=n; i++)
if(cut[i]) ans++;
cout<<ans<<endl;
}
return 0;
}