hdu 1213 How Many Tables
2015-06-29 11:27
447 查看
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1213
简单的并查集。。。
简单的并查集。。。
[code]#include<algorithm> #include<iostream> #include<cstdlib> #include<cstring> #include<cstdio> #include<vector> #include<map> #include<set> using std::cin; using std::cout; using std::endl; using std::find; using std::sort; using std::set; using std::map; using std::pair; using std::vector; using std::multiset; using std::multimap; #define pb(e) push_back(e) #define sz(c) (int)(c).size() #define mp(a, b) make_pair(a, b) #define all(c) (c).begin(), (c).end() #define iter(c) decltype((c).begin()) #define cls(arr,val) memset(arr,val,sizeof(arr)) #define cpresent(c, e) (find(all(c), (e)) != (c).end()) #define rep(i, n) for (int i = 0; i < (int)(n); i++) #define tr(c, i) for (iter(c) i = (c).begin(); i != (c).end(); ++i) const int Max_N = 1010; typedef unsigned long long ull; struct UnionFind { bool exit[Max_N]; int par[Max_N], rank[Max_N]; inline void init(int n) { rep(i, n + 1) { par[i] = i; rank[i] = 0; exit[i] = false; } } inline int find(int x) { while (x != par[x]) { x = par[x] = par[par[x]]; } return x; } inline void unite(int x, int y) { x = find(x), y = find(y); if (x == y) return; if (rank[x] < rank[y]) { par[x] = y; exit[x] = true; } else { par[y] = x; exit[y] = true; if (rank[x] == rank[y]) rank[x]++; } } inline void result(int n) { int tot = -1; rep(i, n + 1) if (!exit[i]) tot++; printf("%d\n", tot); } }go; int main() { #ifdef LOCAL freopen("in.txt", "r", stdin); freopen("out.txt", "w+", stdout); #endif int t, n, m, a, b; scanf("%d", &t); while (t--) { scanf("%d %d", &n, &m); go.init(n); rep(i, m) scanf("%d %d", &a, &b), go.unite(a, b); go.result(n); } return 0; }
相关文章推荐
- JSF(PrimeFaces)由后台向前台传递参数
- ADB (Android Debug Bridge)常用命令
- Android Juint环境配置
- RouterOS 安全模式
- linux-文件系统基本概念
- Python中startswith和endswith的一些说明
- C++ Primer 学习笔记_28_STL实践与分析(2) --顺序容器的操作(上)
- 选择排序跟冒泡排序的比较
- 技术总结
- RPC原理详解
- OOA/OOD/OOP
- 欢迎使用CSDN-markdown编辑器
- ActionBar隐藏方法
- linux下项目发布
- 在Go程序中实现服务器重启的方法
- C++ Primer 学习笔记_27_STL实践与分析(1) --顺序容器的定义、迭代器
- LeetCode_65---Valid Number
- git与github
- 单点登录SSO的实现原理
- java学习——equals()和==的比较