http://codeup.cn/problem.php?id=1106
感觉这道题有点坑,wa了两发才想起来忘记考虑环,增加了对环的判断就A了。
#include <iostream>
#include <cstdio>
#include <stdlib.h>
#include <string.h>
#include <cstdlib>
#include <queue>
#include <cmath>
#include <math.h>
#include <algorithm>
#include <stdio.h>
using namespace std;
int per[1010];
int search(int father)
{
int tem,son;
son=father;
while(father!=per[father])
father=per[father];
while(son!=per[son])
{
tem=son;
son=per[son];
per[tem]=father;
}
return father;
}
int main()
{
int n,m,begin,stop,f1,f2;
while(~scanf("%d%d",&n,&m)&&(n+m))
{
int flag=0;
for(int i=1;i<=n;i++)
{
per[i]=i;
}
n--;
while(m--)
{
scanf("%d%d",&begin,&stop);
f1=search(begin);
f2=search(stop);
if(f1!=f2)//判断是否为环
{
per[f1]=f2;
n--;
}
else
{
flag++;
}
}
if(n==0&&flag==0)
printf("Yes\n");
else
printf("No\n");
}
}