HDU 1272 小希的迷宫(并查集)
Solution
并查集模板题,注意如果案例只有 0 0 ,需要输出yes
代码
#include <algorithm>
#include <cmath>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <stdio.h>
#include <string.h>
#include <string>
#include <vector>
//#define int long long
#define lowbit(x) ((x) & (-x))
using namespace std;
typedef pair<int, int> pii;
typedef pair<long, long> pll;
typedef pair<double, int> pdi;
typedef double dd;
typedef long long ll;
const int MAXN = 100010;
const int MAXM = 10010;
const dd eps = 1e-6;
const int inf = 0x3f3f3f3f;
const ll llinf = 0x3f3f3f3f3f3f3f3f;
int fa[MAXN], vis[MAXN];
int fd(int x){
return x == fa[x] ? x : (fa[x] = fd(fa[x]));
}
int main()
{
while(1)
{
bool ok = 1;
for (int i = 1; i <= 100001;i++)
fa[i] = i, vis[i] = 0;
int x, y;
int f = 0;
vector<int> a;
while (cin >> x >> y)
{
if(x == 0 || x == -1)
break;
a.push_back(x), a.push_back(y);
if(fd(x) == fd(y))
ok = 0;
fa[fd(x)] = fd(y);
}
if (x == -1)
break;
if(a.size())
f = a[0];
for (int i = 1; i < a.size();i++)
if (fd(f) != fd(a[i]))
ok = 0;
if(ok)
printf("Yes\n");
else
printf("No\n");
}
}