您的位置:首页 > 其它

HDU1272 小希的迷宫 并查集

2012-01-18 18:04 232 查看
/*并查集的应用,注意点的个数为0的时候,注意输入*/
#include <iostream>
#include "UFS.h"
using namespace std;

UFS ufs;
bool flag[MAXN]={0}, f;
int cnt_e, cnt_v;
void init();
int main()
{
int n,m;
init();
while(cin>>n>>m)
{
if(m==-1&&n==-1)return 0;
if(m==0&&n==0)
{
getchar();getchar();
/*条件:1.ufs不冲突2.v=e+1(v=0时例外)*/
if(f) cout<<"No"<<endl;
else if(cnt_v==0)cout<<"Yes"<<endl;
else if(cnt_v!=cnt_e+1)cout<<"No"<<endl;
else cout<<"Yes"<<endl;
init();
}
else
{
if(flag[m] == 0)
{
flag[m] = 1;
cnt_v++;
}
if(flag
== 0)
{
flag
= 1;
cnt_v++;
}
m = ufs.Find(m);
n = ufs.Find(n);
if(m==n) f=1;
else
{
ufs.Union(m, n);
cnt_e++;
}
}
}
return 0;
}
void init()
{
ufs.clear();
memset(flag, 0, sizeof(flag));
f = 0;
cnt_v = 0;
cnt_e = 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: