poj 1308 Is It A Tree?
来源:互联网 发布:苹果电脑web前端软件 编辑:程序博客网 时间:2024/06/06 03:10
http://poj.org/problem?id=1308
和小希的迷宫很类似的一道题
1:判断是否只有一个根;
2:判断节点的总数是否比边的总数大一;
3:判断是否有回路;
4:判断每个节点的入度是否<=1;
之前自己按着这四点要求写了代码,发现好麻烦,最后看了别人的博客,发现根本不用那么麻烦,只要判断节点的总数是否比边的总数大一也就判断出了这个集合是否只有一个根,每个节点的入度是不是<=1;
解题思路:
输入两个数,判断是否在一个集合中,如果不在一个集合中,就把它们放到一个集合中;如果在一个集合中就说明这个集合有回路,返回false;还有计算总节点数和总边数
初次接触树的问题,花的时间可不少呢,不过还好,总算弄明白了
#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>#include <cmath>#include <cstdlib>#include <limits>#include <queue>#include <stack>#include <vector>#include <map>using namespace std;#define N 100010#define INF 0xfffffff#define PI acos (-1.0)#define EPS 1e-8int f[N], r[N], flag, flag1, flag2, flag3, flag4, vis[N];int Find (int x);//查找根节点void Init ();//初始化void join (int a, int b);//判断两个节点之间是否有回路int main (){ int a, b, k = 1; while (scanf ("%d%d", &a, &b), a != -1 && b != -1) { flag = 1, flag1 = 0, flag2 = 0; if (!a && !b) { cout << "Case " << k++ << " is a tree." << endl; continue; } Init (); while (a || b) { if (!vis[a]) flag1++, vis[a] = 1; if (!vis[b]) flag1++, vis[b] = 1; flag2++; join (a, b); scanf ("%d%d", &a, &b); } if (flag && flag1 == flag2 + 1)//没有回路并且节点数=边数+1 cout << "Case " << k++ << " is a tree." << endl; else cout << "Case " << k++ << " is not a tree." << endl; }}int Find (int x){ if (x != f[x]) f[x] = Find (f[x]); return f[x];}void join (int a, int b){ int x = Find (a), y = Find (b); if (x != y) f[x] = y;//根节点合并 else flag = 0;}void Init (){ memset (vis, 0, sizeof (vis)); for (int i=1; i<=N; i++) f[i] = i;}
0 0
- POJ 1308 Is It A Tree?
- POJ 1308 Is It A Tree?
- poj 1308 Is it a Tree?
- POJ 1308 Is it a tree??
- poj 1308 Is It A Tree?
- poj 1308 Is It A Tree?
- POJ 1308 Is It A Tree?
- poj 1308 Is It A Tree?
- poj 1308 Is It A Tree?
- POJ 1308 Is It A Tree?
- poj 1308 Is It A Tree?
- Poj 1308 Is It A tree
- poj 1308 is it a tree
- POJ 1308 Is It A Tree?
- POJ 1308 Is It A Tree?
- POJ-1308-Is It A Tree?
- POJ 1308 Is It A Tree?
- POJ 1308 Is It A Tree?
- poj 2062 Card Game Cheater(排序+模拟)
- 【CODEFORCES】 B. Dreamoon and Sets
- Redis命令执行全过程
- 深度学习工具箱和Vlfeat库的配置及使用
- 卡塔尼亚中文离线地图App上线
- poj 1308 Is It A Tree?
- (WPF)路由策略
- google play store终于能正常使用了
- hdu2255 KM算法入门 KM算法模板
- 最简单的基于FFmpeg的移动端例子附件:Android 自带播放器
- Android之Button按钮点击事件的三种方法
- 笔试真题解析 ALBB-2015 算法工程师实习生机试
- Android SDK、开发工具下载镜像服务器推荐,再也不用担心被墙了
- 直观表现出while与do while的区别