#pragma comment(linker, "/STACK:1024000000,1024000000")
#include <iostream>
using namespace std;
#define MAX_N 100005
static int par[MAX_N];
static void init()
{
for(int i=0;i<MAX_N;++i)
par[i] = 0;
}
static int getParent(int u)
{
if (par[u]!=u)
par[u] = getParent(par[u]);
return par[u];
}
static void merge(int u,int v)
{
int p1 = getParent(u);
int p2 = getParent(v);
if (p1==p2)return;
par[p1] = p2;
}
static bool same(int u,int v)
{
int p1 = getParent(u);
int p2 = getParent(v);
if (p1==p2)return true;
return false;
}
int main()
{
int u,v;
int cnt = 0;
while(true)
{
scanf("%d %d",&u,&v);
if (u==-1&&v==-1)
break;
init();
bool flag = false;
cnt = 0;
if (u==0&&v==0)
{
flag = false;
printf("Yes\n");
continue;
}
else
{
par[u] = u;
par[v] = v;
merge(u,v);
while(scanf("%d %d",&u,&v)&&u&&v)
{
if (par[u]==0)
par[u] = u;
if (par[v]==0)
par[v] = v;
if (same(u,v))
flag = true;
merge(u,v);
}
}
int k=0;
//统计是否是森林
for (int i=1;i<MAX_N;++i)
if (par[i]==i)
k++;
if (k>1||flag)
printf("No\n");
else
printf("Yes\n");
}
return 0;
}
HDOJ1272并查集加判断森林
最新推荐文章于 2019-01-17 15:57:07 发布