hdu1325

没过,以后再来看
/*
有向图,判断树 每个点保存出度 每个非根点最多只能有一个入度 用并查集判断连通性 */ #include<iostream> #include<cstring> #include<cstdio> #define MAXN 1000000 using namespace std; int F[MAXN]; int in[MAXN]; bool used[MAXN]; int circle,edge; int find(int x){ if(F[x]==-1) return x; return F[x]=find(F[x]); } void bing(int a,int b){ int t1=find(a); int t2=find(b); if(t1!=t2) F[t1]=t2; else circle=1; } void init(){ circle=edge=0; memset(F,-1,sizeof F); memset(in,0,sizeof in); memset(used,0,sizeof used); }//要求,circle=0, int main(){ int tt=0; int u,v; while(scanf("%d%d",&u,&v)==2){ if(u==-1 && v==-1) break; if(u==0 && v==0){ printf("Case %d is a tree. ",tt); continue; } init(); int Max=-1; edge++; Max=max(Max,u);Max=max(Max,v); bing(u,v); while(1){ scanf("%d%d",&u,&v); if(u==0) break; edge++; Max=max(Max,u);Max=max(Max,v); bing(u,v); } int cnt=0; if(circle==0 && edge) } return 0; }
原文地址:https://www.cnblogs.com/zsben991126/p/9823357.html