题意: 给你个图,问你是否是树型结构。
题解,判断是否存在1个点的入度大于1 or 入读为0 的点不是一个。
满足以上条件no 否则 yes
我把这些条件都写上之后,竟然还建了个图跑了一遍。。。。。。卧槽。真是蠢死了。
#include<iostream>
#include<string>
#include<stdio.h>
#include<string.h>
#include<map>
#include<set>
#include<queue>
#include<math.h>
#include<algorithm>
#define ll long long
using namespace std;
const int maxn=500;
const int maxm=1e5+100;
const int inf = 5000001;
int cnt;
int ine[maxn];
int m[maxn];
set<int >out;
set<int>::iterator it;
int main(){
int n,k,f,ca=1,N;
while(~scanf("%d %d",&n,&k)){
if(n==-1&&k==-1) break;
if(n+k==0){
printf("Case %d is a tree.\n",ca++);continue;
}
out.clear();
memset(ine,0,sizeof(ine));
ine[k]++;
cnt=0;f=1;
if(ine[n]==0) out.insert(n);
while(scanf("%d %d",&n,&k)&&(n+k)){
ine[k]++;if(ine[k]>1) f=0;
if(ine[n]==0) out.insert(n);
}int o=0;
for(it=out.begin();it!=out.end();++it){
if(ine[*it]==0) o++;
}
if(!f||o!=1)
printf("Case %d is not a tree.\n",ca++);
else{
printf("Case %d is a tree.\n",ca++);
}
}
return 0;
}