POJ 1182 食物链(带权并查集)
来源:互联网 发布:刚哥哥淘宝店招制作 编辑:程序博客网 时间:2024/05/01 16:36
题目链接:食物链
这题是带权并查集的经典题,用rank[i]表示i与i父亲的关系,0为同类,1为吃,2为被吃。
rank在压缩路径和合并过程的转化在纸上把所有情况归纳出来,就可以变成一个公式。
代码:
#include <stdio.h>#include <string.h>const int N = 50005;int n, k, parent[N], rank[N], ans = 0;int find(int x) {if (parent[x] == x) return x;else {int p = find(parent[x]);rank[x] = (rank[x] + rank[parent[x]]) % 3;parent[x] = p;}return parent[x];}int main() {scanf("%d%d", &n, &k);for (int i = 1; i <= n; i++) {parent[i] = i; rank[i] = 0;}while (k--) {int q, a, b;scanf("%d%d%d", &q, &a, &b);if (a > n || b > n || (q == 2 && a == b)) ans++;else {int pa = find(a), pb = find(b);if (pa == pb) {if ((rank[b] - rank[a] + 3) % 3 != q - 1) ans++;}else {parent[pb] = pa;rank[pb] = (rank[a] - rank[b] + q + 2) % 3;}}}printf("%d\n", ans);return 0;}
1 0
- 食物链(poj-1182)(带权并查集)
- POJ 1182 食物链(带权并查集)
- POJ-1182 食物链 (带权并查集)
- poj 1182 食物链(带权并查集)
- POJ 1182 食物链(带权并查集)
- poj 1182食物链(带权并查集)
- POJ 1182 食物链(带权并查集)
- POJ 1182 食物链 (经典带权并查集)
- POJ 1182 食物链(带权并查集)
- POJ 1182 食物链(带权并查集)
- POJ 1182 食物链(带权并查集)
- POJ 1182 食物链(并查集 带权路径)
- POJ 1182 食物链 (带权并查集)
- kuangbin专题五 并查集 POJ 1182食物链(带权并查集)重要
- poj 1182 食物链(带权并查集)
- poj 1182 食物链(带权并查集)
- POJ 1182 食物链(带权并查集)
- poj 1182 食物链 //带权并查集
- Android翻译之---- Drag and Drop
- 设计模式学习--工厂模式(C++)
- 你是我最美的相遇
- 为CentOS 6.x添加EPEL源
- AM335x Linux调试1--MLO中打印寄存器值
- POJ 1182 食物链(带权并查集)
- 微软面试100题之14题:输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字。
- iOS推送证书导出pem文件
- Java抽象类和接口的区别
- AIDL(安卓接口定义语言)
- java web安全总结
- 获取状态栏高度(运用反射)
- centos CentOS-6.2-i386-minimal 安装gnome桌面环境
- 深入理解Hadoop集群和网络