hdoj 1325是不是树

来源:互联网 发布:超市语音播报软件 编辑:程序博客网 时间:2024/05/14 18:17
#include<iostream>#include<stdio.h>#include<string>using namespace std;#define MAX 1000int map[MAX][MAX];int number[MAX];//这一行的-1的个数int HasNumber[MAX];//这一行是不是有数int check(){int i,j;int flag=0;for(i=0;i<MAX;i++){//如果说这一行全是0表明没有数据int quanling=1;for(j=0;j<MAX;j++){if(map[i][j]!=0){quanling=0;}}if(quanling){HasNumber[i]=0;}//如果这一行不是全零才需要处理if(!quanling){for(j=0;j<MAX;j++){if(map[i][j]==-1)number[i]++;}}}//开始判断是不是树,第一,只有一个有数的行没有-1//                  第二,每一有数的行只有一个-1//第一个条件int N1=0;//没有-1的行for(i=0;i<MAX;i++){if(HasNumber[i]&&number[i]==0){N1++;HasNumber[i]=0;//我门把没有-1的行认为是没有数,这样下面好处理}}if(N1!=1){return 0;}//第二个条件for(i=0;i<MAX;i++){if(!HasNumber[i]){continue;}if(number[i]==1){continue;}return 0;}return 1;}int main(){//freopen("input.txt","in",stdin);int a,b;int i,j;int casen=0;while(scanf("%d%d",&a,&b)){if(a<0&&b<0){return 0;}casen++;//如果第一组输入就是结束if(a==0&&b==0){printf("Case %d is not a tree.\n",casen);}//初始化for(i=0;i<MAX;i++){HasNumber[i]=1;number[i]=0;for(j=0;j<MAX;j++){map[i][j]=0;}}map[a][b]=1;map[b][a]=-1;while(scanf("%d%d",&a,&b)){//如果结束if(a==0&&b==0)break;map[a][b]=1;map[b][a]=-1;}//开始处理。if(check()){printf("Case %d is a tree.\n",casen);}else{printf("Case %d is not a tree.\n",casen);}}return 0;}/*1 while(scanf("%d%d",&a,&b)) 这样写换行也不怕。*/