zju 2740 Message System
2008-05-13 21:51
183 查看
题目的意思就是判断一个图是否是树,一开始我的做法是先判断图是否联通,然后判断是否有环.判断联通用了O(N),然后判断环用了O(N^2),tle了.后来在网上搜了下,想起了判断环可以用并查集,并且并查集也可以判断是否是联通的,而且用最简单的并查集就行了
#include<iostream> #include <string> #include <set> using namespace std; int m, n; int p[1001], num[1001]; int find(int t) { int ot = t; if(p[t] == t) return t; while (p[t] != t) { t = p[t]; } int temp; while (p[ot] != t) { temp = p[ot]; p[ot] = t; ot = temp; } return t; } bool unit(int a, int b) { int pa = find(a); int pb = find(b); if(pa == pb) return false; if(num[pa] > num[pb]) { p[pb] = pa; ++num[pa]; } else { p[pa] = pb; ++num[pb]; } return true; } int main() { int i, j; int a, b; while (scanf("%d%d",&n,&m) != EOF) { if(m==0 && n==0) break; if(m != n-1) { for (i=0; i<m; ++i) scanf("%d%d",&a,&b); printf("No/n"); continue; } for (i=1; i<=n; ++i) { p[i] = i; num[i] = 1; } bool flag = true; for (i=0; i<m; ++i) { scanf("%d%d",&a,&b); if(!unit(a,b)) flag = false; } if(flag) printf("Yes/n") ; else printf("No/n"); } return 0; }
相关文章推荐
- Zju 2740 Message System解题分析
- Unexpected Error 0x8ffe2740 Occured
- zju1453(二维凸包)
- zju 1721 The Doors
- iis 启动不了,提示发生意外错误0x8ffe2740 解决最好方法 心得
- ZJU 1331 解题报告
- ZJU1146解题报告
- zju上面终于AC了220+题,发图纪念一下
- ZJU1217 Eigh
- zju acm 1007
- 启动IIS出现 0x8ffe2740 错误的解决办法
- ZJU2013 Labyrinth - 树的最长路
- ZJU2759 Perfect Weighing Skill - 天平称重问题
- ZJU1453 Surround the Trees - 计算几何 经典凸包
- zju 2529 DomiNo Grid
- zju 1836 Number Puzzle
- IIS发生意外错误0x8ffe2740
- Zju 2726 Constellation 解题分析与测试输出
- ZJU 2124 Perfect Pth Powers
- ZJU 1002 Fire Net - 二分图最大匹配