HDOJ1272并查集加判断森林

来源:互联网 发布:橙汁哪个牌子好 知乎 编辑:程序博客网 时间:2024/06/04 18:03
#pragma comment(linker, "/STACK:1024000000,1024000000")#include <iostream>using namespace std;#define MAX_N  100005static int par[MAX_N];static void init(){for(int i=0;i<MAX_N;++i)par[i] = 0;}static int getParent(int u){if (par[u]!=u) par[u] = getParent(par[u]);return par[u];}static void merge(int u,int v){int p1 = getParent(u);int p2 = getParent(v);if (p1==p2)return;par[p1] = p2;}static bool same(int u,int v){int p1 = getParent(u);int p2 = getParent(v);if (p1==p2)return true;return false;}int main(){int u,v;int cnt = 0;while(true){scanf("%d %d",&u,&v);if (u==-1&&v==-1) break;init();bool flag = false;cnt = 0;if (u==0&&v==0){flag = false;printf("Yes\n");continue;}else{par[u] = u;par[v] = v;merge(u,v);while(scanf("%d %d",&u,&v)&&u&&v){if (par[u]==0) par[u] = u;if (par[v]==0) par[v] = v;if (same(u,v))flag = true;merge(u,v);}}int k=0;//统计是否是森林for (int i=1;i<MAX_N;++i) if (par[i]==i)  k++;if (k>1||flag) printf("No\n");else printf("Yes\n");}return 0;}

0 0