poj 1182 深入并查集
2015-08-11 15:04
363 查看
#include <stdio.h> #include <string.h> #include <algorithm> #pragma warning (disable : 4996) using namespace std; const int Max = 50005; int Father[Max], Rank[Max], n; void Init() { for (int i = 0; i <= n; i++) Father[i] = i; memset(Rank, 0, sizeof(Rank)); } int Find(int x) { if (x != Father[x]) { int fx = Find(Father[x]); Rank[x] = (Rank[x] + Rank[Father[x]]) % 3; Father[x] = fx; } return Father[x]; } bool Union(int x, int y, int k) { int fx = Find(x); int fy = Find(y); if (fx == fy) { if ((Rank[y] - Rank[x] + 3) % 3 != k)return true; return false; } Father[fy] = fx; Rank[fy] = (Rank[x] - Rank[y] + k + 3) % 3; return false; } int main() { int k, x, y, d; scanf("%d %d", &n, &k); int sum = 0; Init(); while (k--) { scanf("%d %d %d", &d, &x, &y); if (x > n || y > n || (x == y&&d == 2)) sum++; else if (Union(x, y, d - 1)) sum++; } printf("%d\n", sum); return 0; }
相关文章推荐
- java线程池ThreadPoolExecutor原理及使用
- Swift开发教程--有关图片处理的一些有用函数
- java 环境变量配置
- C++_重载运算符<< ostream流重载注意事项_使自定义数据可以用cout输出
- 数据结构(26)二叉树
- Merge into的使用详解-你Merge了没有【转】
- PAT 1044. Shopping in Mars (25)
- 2015/08/11博客园页面(自身)
- WebSocket在java Tomcat中实现
- UI021---UITableView数据刷新
- 7种查找算法解析
- 好看的dialog,sweet Alert Dialog 导入Android Studio
- svn自动提交WEB应用代码
- 获得Android设备的唯一序列号
- 进程和线程最生动的理解
- 记录贴--Office 2016激活
- 好看的dialog,sweet Alert Dialog 导入Android Studio
- IOS UITableView索引排序功能
- 转: 从微信的故障谈谈服务可用性
- Ubuntu 14.10 下安装Ambari