记录编号 |
108412 |
评测结果 |
AAAAAAAAAA |
题目名称 |
备用交换机 |
最终得分 |
100 |
用户昵称 |
JSX |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.006 s |
提交时间 |
2014-07-04 16:35:05 |
内存使用 |
0.33 MiB |
显示代码纯文本
#include<algorithm>
#include<cstdio>
using namespace std;
int N;
bool flag[101];
int f[101],z[101]={0};
int nMap[101][101];
int find(int x)
{
if(f[x]!=x) f[x]=find(f[x]);
return f[x];
}
int zuhe(int x,int y)
{
int r1=find(x);
int r2=find(y);
if(r1!=r2)
{
if(r1>r2) f[r2]=r1;
else f[r1]=r2;
}
}
int main()
{
freopen("gd.in","r",stdin);
freopen("gd.out","w",stdout);
scanf("%d",&N);
int a,b;
while(scanf("%d%d",&a,&b)==2)
{
nMap[a][++nMap[a][0]]=b;
nMap[b][++nMap[b][0]]=a;
}
for(int i=1;i<=N;++i) f[i]=i;//初始化
for(int i=1;i<=N;++i)//并查集连接
{
for(int j=1;j<=nMap[i][0];++j)
{
zuhe(i,nMap[i][j]);
}
}
int LT=0;
for(int i=1;i<=N;++i)
{
f[i]=find(i);
flag[f[i]]=1;
}
for(int i=1;i<=N;++i)
{
if(flag[i]==1) LT++;
flag[i]=0;
}
// printf("%d \n" ,LT);
for(int i=1;i<=N;++i)
{
if(nMap[i][0]==0)
{
flag[i]=1;
//printf("%d ",i);
}
}
for(int t=1;t<=N;++t)
{
for(int i=1;i<=N;++i) f[i]=i;//初始化
for(int i=1;i<=N;++i)//并查集连接
{
if(i==t) continue;
for(int j=1;j<=nMap[i][0];++j)
{
if(nMap[i][j]==t) continue;
zuhe(i,nMap[i][j]);
}
}
/*for(int i=1;i<=N;++i)
{
printf("%d ",find(i));
}*/
//printf("The ENd__________\n");
int Ans=0;
for(int i=1;i<=N;++i)
{
if(find(i)==i) Ans++;
}
if(Ans>LT+1) z[++z[0]]=t;
//printf("ANS==%d\n",Ans);
}
printf("%d\n",z[0]);
for(int i=1;i<=z[0];++i)
{
printf("%d\n",z[i]);
}
return 0;
}