没过,以后再来看
/*
有向图,判断树
每个点保存出度
每个非根点最多只能有一个入度
用并查集判断连通性
*/
#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.\n",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;
}