知识点:并查集
这个题有一个坑点,那么就是可能输入的数据就是一组0 0,那么这个时候输出yes,其它的没有了
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
int fa[N], h[N];
int get(int x) {
if (x == fa[x]) return x;
return fa[x] = get(fa[x]);
}
void merge(int x, int y) {
fa[get(x)] = get(y);
}
int main() {
int x, y;
while (cin >> x >> y && x != -1) {
if (!x && !y) { cout << "Yes\n"; continue; }
for (int i = 0; i < N; i++) fa[i] = i;
memset(h, 0, sizeof(h));
h[x] = h[y] = 1;
merge(x, y);
int ok = 1;
if (x == y) ok = 0;
while (cin >> x >> y && x) {
if (get(x) == get(y)) ok = 0;
h[x] = h[y] = 1;
merge(x, y);
}
if (!ok) { cout << "No\n"; continue; }
set<int> st;
for (int i = 1; i < N; i++) {
if (!h[i]) continue;
st.insert(get(i));
}
cout << ((int) st.size() > 1 ? "No" : "Yes") << '\n';
}
return 0;
}