[hihocoder1322] 树结构判定
来源:互联网 发布:python多行注释快捷键 编辑:程序博客网 时间:2024/06/08 12:31
这是hiho一下 第161周的题目
题目描述
时间限制:10000ms
单点时限:1000ms
内存限制:256MB
描述
给定一个包含 N 个顶点 M 条边的无向图 G ,判断 G 是不是一棵树。
输入
第一个是一个整数 T ,代表测试数据的组数。 (1 ≤ T ≤ 10)
每组测试数据第一行包含两个整数 N 和 M 。(2 ≤ N ≤ 500, 1 ≤ M ≤ 100000)
以下 M 行每行包含两个整数 a 和 b ,表示顶点 a 和顶点 b 之间有一条边。(1 ≤ a, b ≤ N)
输出
对于每组数据,输出YES或者NO表示 G 是否是一棵树。
样例输入
2
3 2
3 1
3 2
5 5
3 1
3 2
4 5
1 2
4 1
样例输出
YES
NO
算法简介
首先通过M==N-1做树判断。
然后深度优先搜索,判断是否存在回路,存在回路则非树。
最后遍历所有节点,判断是否有节点没有被访问。
犯错误的部分:因为是无向边,所以添加的时候需要在两个节点都添加;而使用过边之后,需要两个方向的边都删除。
代码
#include <iostream>#include <list>using namespace std;struct Node { list<int> next;};int N,M,a,b;bool flag[502];bool test(Node* nodes,int s) { if (flag[s]) return false; flag[s] = true; for (list<int>::iterator iter = nodes[s].next.begin();iter != nodes[s].next.end();++iter) { nodes[*iter].next.remove(s); if (!test(nodes,*iter)) return false; } return true;}bool deter() { cin >> N >> M; if (M != N-1) { for (int i = 0;i < M;++i) cin >> a >> b; return false; } Node nodes[502]; for (int i = 0;i < M;++i) { cin >> a >> b; nodes[a-1].next.push_front(b-1); nodes[b-1].next.push_front(a-1); } for (int i = 0;i < N;++i) flag[i] = false; if (!test(nodes,0)) return false; for (int i = 0;i < N;++i) if (!flag[i]) return false; return true;}int main(){ int T; cin >> T; for (int i = 0;i < T;++i) cout << ((deter())?"YES":"NO") << endl; return 0;}
阅读全文
0 0
- [hihocoder1322] 树结构判定
- hihoCoder 1322:树结构判定
- 二叉树的子结构的判定
- 二叉树判定树结构是否相同,值是否相同
- hihoCoder 树结构判定(并查集)
- hiho一下 第161周 树结构判定 题解
- hiho一下 第161周 树结构判定
- hihoCoder 1322 : 树结构判定 (dfs 或 并查集)
- 完全二叉树判定
- 判定树id3算法
- nyoj129(树的判定)
- 树的判定两道题
- NYOJ--树的判定
- 树的判定
- 树的判定
- 平衡二叉树判定
- 二叉树遍历判定
- NYOJ129(判定树)
- 关于jdk、tomcat、maven环境变量的配置总结
- 【Linux】1目录、系统资源查询
- 跨站请求伪造防御
- C#简易计算器
- 利用set对list进行合并去重
- [hihocoder1322] 树结构判定
- 对搜索引擎(SEO)的索引有帮助一些HTML标签
- 【二十四】Visual Studio 2013 好用的插件
- 【Java】Java图形化用户界面-GUI
- 畅通工程
- eclipse启动tomcat警告 [SetPropertiesRule]{Server/Service/Engine/Host/Context}
- Typeof
- 数组的原生方法的总结
- tomcat问题集锦