题目:
链接:
题意:
思路:
一个并查集,题目就是要让你推断是否是一个连通的无环图。1>推断成环的时候,仅仅要推断输入边的两个点。有一个共同的父节点,那么这两个点就成环。2>推断连通的时候,仅仅要推断根节点数为1就可以。注意:当输入的这组数据仅仅有 0 0 时,依旧是满足,即应输出 "Yes"。
代码:
#include#include #include #define MAXN 100010using namespace std;int a,b;int flag;int root[MAXN],sign[MAXN];int find(int x){ int r = x; while(r != root[r]) r = root[r]; return r;}void merge(int x,int y){ int fx = find(x); int fy = find(y); if(fx != fy) root[fx] = fy; else//有共同的父节点 flag = 0;}int main(){ //freopen("input.txt","r",stdin); int ok; while(scanf("%d%d",&a,&b) != EOF && (a != -1 || b != -1)) { memset(root,0,sizeof(root)); if(a == 0 && b == 0) { printf("Yes\n"); continue; } for(int i=1; i 1) flag = 0; } if(flag) printf("Yes\n"); else printf("No\n"); } return 0;}