题意:

题目给你一组单向边,当遇到输入0 0就证明这是一组边,当遇到-1 -1就要停止程序。让你判断这是不是一棵树

题解:

题目很简单,但是程序要考虑的很多

1、因为是一颗树,所以肯定不能出现环,这个可以用并查集来判断

2、边数量+1==节点数量

3、每一个点的入度不能大于1(例如边a->b,这个b点的入度就要加1)

代码:

 1 #include<stdio.h>
2 #include<string.h>
3 #include<iostream>
4 #include<algorithm>
5 #include<queue>
6 #include<map>
7 #include<vector>
8 #include<math.h>
9 #define mem(a,x) memset(a,x,sizeof(a))
10 using namespace std;
11 typedef long long ll;
12 const int maxn=120000+10;
13 const int mod=26;
14 const int INF=0x3f3f3f3f;
15 const int Times = 10;
16 const int N = 5500;
17 int v[maxn],vis[maxn],sum[maxn];
18 int flag=0;
19 int finds(int x)
20 {
21 if(x!=v[x])
22 {
23 int y=finds(v[x]);
24 return v[x]=y;
25 }
26 return x;
27 }
28 void join(int a,int b)
29 {
30 int fa=finds(a),fb=finds(b);
31 if(fa!=fb)
32 v[fa]=fb;
33 else
34 flag=1;
35 }
36 int main()
37 {
38 int a,b,p=1,edge;
39 while(scanf("%d%d",&a,&b))
40 {
41 flag=0;
42 edge=0;
43 for(int i=1; i<maxn; i++)
44 {
45 v[i]=i;
46 }
47 memset(vis,0,sizeof(vis));
48 memset(sum,0,sizeof(sum));
49 if(a<0&&b<0)
50 break;
51 if(a==0&&b==0)
52 {
53 printf("Case %d is a tree.\n",p);
54 p++;
55 continue;
56 }
57 vis[a]=vis[b]=1;
58 join(a,b);
59 sum[b]++;
60 edge++;
61 while(scanf("%d%d",&a,&b))
62 {
63 if(a==0&&b==0)
64 break;
65 join(a,b);
66 vis[a]=vis[b]=1;
67 sum[b]++;
68 edge++;
69 }
70 if(flag==1)
71 {
72 printf("Case %d is not a tree.\n",p++);
73 }
74 else
75 {
76 int flagg=0,node=0;
77 for(int i=1; i<maxn; i++)
78 {
79 if(vis[i]==1)
80 node++;
81 if(sum[i]>1)
82 flagg=1;
83 }
84 if(node==(edge+1)&&flagg==0)
85 {
86 printf("Case %d is a tree.\n",p++);
87 }
88 else
89 {
90 printf("Case %d is not a tree.\n",p++);
91 }
92 }
93 }
94 }

最新文章

  1. -Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HO 解决办法
  2. CSS清除浮动
  3. 批量修改一张表格的多个sheet名
  4. JavaScript中的数组遍历forEach()与map()方法以及兼容写法
  5. GSEA的使用
  6. cocos2dx资源和脚本加密quick-lua3.3final
  7. Unity-Animator深入系列---剪辑播放后位置预判(Animator.Target)
  8. 用日志文件备份sqlserver
  9. ios 闪屏页的设置
  10. 那些日常琐事(iPhone上的细小提示,大数据分析)
  11. BZOJ 2141: 排队 [CDQ分治]
  12. React(上)
  13. googLeNet网络
  14. 深入学习C#匿名函数、委托、Lambda表达式、表达式树类型——Expression tree types
  15. jsp路径问题之base
  16. iOS应用之间的跳转
  17. Oracle11g 查询长时间运行的SQL
  18. 登录centos虚拟机后显示-bash-4.1
  19. xp系统报错 windows explorer has encountered a problem and needs to close.We are sorry for the inconvenience
  20. mvn install 时候报GBK编码错误解决办法

热门文章

  1. 【Docker】在Linux系统中安装Docker虚拟机、启动停止重启查看Docker命令
  2. Error: Could not request certificate: No route to host - connect(2)
  3. 【Linux】使用cryptsetup加密磁盘 策略为LUKS
  4. 微信登录2-生成授权URL
  5. 转 15 jmeter分布式性能测试
  6. 【python刷题】LRU
  7. 查看窗口名 调用dll setForegroundWindow
  8. jasper使用table组件设计复杂的表头
  9. 【题解】CF952F 2 + 2 != 4
  10. LOJ2723