看到这个题一开始想到并查集,仔细想了下,其实可以直接统计点数和边数,再作比较,就直接出来了
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
bool vis[100005];
int a,b;
int cnt1=0,cnt2=0;
memset(vis,0,sizeof(vis));
while(~scanf("%d%d",&a,&b))
{
if(a==-1&&b==-1)
break;
if(a==0&&b==0)
{
printf("Yes\n");
continue;
}
cnt1++;
vis[a]=vis[b]=1;
while(~scanf("%d%d",&a,&b))
{
if(a==0&&b==0)
break;
vis[a]=vis[b]=1;
cnt1++;
}
for(int i=1;i<100005;i++)
{
if(vis[i])
cnt2++;
}
if(cnt2-cnt1==1)
printf("Yes\n");
else
printf("No\n");
cnt1=cnt2=0;
memset(vis,0,sizeof(vis));
}
return 0;
}