poj1182食物链 并查集
来源:互联网 发布:快充电池 知乎 编辑:程序博客网 时间:2024/05/01 05:12
这题与hdu1829做法类似,在一棵树中,用0表示该节点与根节点相同,1表示该节点被根节点吃,-1表示该节点吃根节点。
#include<iostream>#include<cstdio>using namespace std;const int maxn=50005;int set[maxn],c[maxn];//set记录父亲节点,c记录当前节点与根节点的关系//0 :同类 1:被根节点吃 -1:吃根节点void init(int n){ for(int i=1;i<=n;i++) { set[i]=i; c[i]=0; }}inline int change(int x){ if(x==2) return -1; else if(x==-2) return 1; else return x;}int find(int x){ if(set[x]==x) return x; int t=set[x]; set[x]=find(t); c[x]=change(c[x]+c[t]);//路径压缩并更新节点与根节点的关系 return set[x];}bool merge(int x,int y,int d){ int f1=find(x); int f2=find(y); if(f1==f2) return false; set[f1]=f2; c[f1]=change((c[y]-d-c[x]+1)%3);//画出食物链可以看出来 return true;}int main(){ int n,m; int d,a,b,sum=0; scanf("%d%d",&n,&m); init(n); while(m--) { scanf("%d%d%d",&d,&a,&b); if(d==2&&a==b||a>n||b>n) { sum++; continue; } //若两种动物处于同一条食物链且不符合当前关系,则为假话 if(!merge(a,b,d)&&change(c[b]-c[a])!=d-1) sum++; } printf("%d\n",sum); return 0;}
- 食物链 POJ1182 -- 并查集
- poj1182 食物链 (并查集)
- poj1182 并查集 食物链
- poj1182食物链 并查集
- 并查集-POJ1182食物链
- POJ1182 - 食物链 - 并查集
- 并查集 食物链 POJ1182
- poj1182 食物链(并查集)
- POJ1182 食物链 并查集
- Poj1182食物链 (并查集)
- POJ1182 食物链(并查集)
- 【并查集】:poj1182,食物链
- POJ1182 食物链(并查集)
- POJ1182 食物链 并查集
- poj1182 食物链[并查集]
- poj1182 食物链(并查集)
- POJ1182 食物链【并查集】
- poj1182食物链(种类并查集)
- python 中的else
- 设计模式之 工厂模式三姐妹
- Mac OS & Xcode 常用快捷键
- mac:php连接mysql,出现错误: mac PHP Warning: mysql_connect(): [2002] No such file...
- C++ vector容器类型
- poj1182食物链 并查集
- wpa_supplicant无线网络配置
- 在Mac OS X 10.8 中配置Apache + PHP + MySQL
- 网络编程之ioctl函数
- win7系统体验
- 面向对象的程序设计-8-运算符重载-part3
- Oracle处理Blob类型数据
- 概率语言模型及其变形系列(5)-LDA Gibbs Sampling 的JAVA实现
- Animation & Spritesheets