题目链接:小希的迷宫
思路
首先,前提条件肯定是一棵树,即 E == V-1,判断一波
其次,满足上述条件的样例的所有节点应该在同一个集合
同时满足上述两个条件的样例应该是可以的
WA点
样例 0 0 是合法输入,应该输出 Yes(emm,贡献了一发)
代码
#include <bits/stdc++.h>
using namespace std;
const int maxn = 100003;
int par[maxn];
set<int> st;
void init()
{
for(int i=0;i<maxn; i++)
{
par[i]=i;
}
}
int find(int x)
{
if(x==par[x]) return x;
else return par[x] = find(par[x]);
}
void unite(int x, int y)
{
x = find(x), y = find(y);
if(x==y) return ;
par[y]=x;
}
int main()
{
int x, y;
while(cin>>x>>y && x!=-1 &&y!=-1)
{
if(x==0 && y==0 )
{
puts("Yes");
continue;
}
init(); int res= 0, edg = 1;
st.clear();
unite(x, y);
st.insert(x); st.insert(y);
while(cin>>x>>y && x &&y)
{
edg++;
unite(x, y);
st.insert(x); st.insert(y);
}
if(edg!=st.size()-1)
{
puts("No");continue;
}
res = find(*st.begin());
set<int>::iterator i;
for(i = st.begin(); i!=st.end(); i++)
{
int x = find(*i);
if(res!=x) break;
}
if(i==st.end()) puts("Yes");
else puts("No");
}
return 0;
}