刚开始这道题读数据时用了stringstream和getline,结果超时了,也不知道哪里超了,改了半天最后才想到输入,改掉输入就ac了
#include <iostream>
#include <cstdio>
#include <cstring>
#include <sstream>
using namespace std;
int n,ans;
int way[150][150],cway,der[150],a;
int used[150];
void dfs(int x)
{
for(int i=1;i<=n;i++){
if(i!=a){
if(way[x][i]==1 && !used[i]){
used[i]=1;
dfs(i);
}
}
}
}
bool Is()
{
for(int i=1;i<=n;i++){
if(i!=a){
if(!used[i]) return true;
}
}
return false;
}
int main()
{
while(~scanf("%d",&n) && n!=0){
int f,i;
memset(way,0,sizeof(way));
memset(der,0,sizeof(der));
char str;
int son;
while(scanf("%d",&f) && f!=0){
while(scanf("%c",&str) && str==' '){
scanf("%d",&son);
way[f][son]=1;
way[son][f]=1;
der[f]++;
der[son]++;
}
}
ans=0;
for(i=1;i<=n;i++){
memset(used,0,sizeof(used));
if(der[i]>1){
for(int j=1;j<=n;j++){
if(way[i][j]==1){
cway=j;
break;
}
}
a=i;
dfs(cway);
if(Is())ans++;
}
}
printf("%d\n",ans);
}
return 0;
}