带权并查集模板(poj1182食物链验证)
2011-09-10 07:38
176 查看
暑假才做过。。。忘完了,重新复习带权并查集
#include<stdio.h> using namespace std; int a,b,error=0; int n,k,set[50500]; int rank[50500]; int d,x,y; long findset(int x){ int y=x; if(set[x]==x) return x; else y=findset(set[x]); rank[x]=(rank[set[x]]+rank[x])%3; set[x]=y; return y; } void unions(int x,int y,int w){ //long a,b; a=findset(x); b=findset(y); set[b]=a; rank[b]=(rank[x]-rank[y]+w+3)%3; } int main(){ scanf("%d %d",&n,&k); for(int i=0;i<n;i++){ set[i]=i; rank[i]=0; } //cout<<n<<k; for(int i=0;i<k;i++){ scanf("%d %d %d",&d,&x,&y); //cin>>d>>x>>y; if(x>n||y>n) {error++; continue;} a=findset(x); b=findset(y); if(a==b){ if(d==1&&rank[x]!=rank[y]){error++; continue;} if(d==2&&(rank[x]+1)%3!=rank[y]){error++; continue;} } unions(x,y,d-1); } cout<<error; return 1; }
相关文章推荐
- poj1182食物链,经典带权并查集
- 并查集简单模板及其解释
- poj1182食物链(带权并查集+路径压缩)
- WPF数据验证----错误模板
- 并查集模板
- caioj1092 并查集模板
- poj1182食物链(并查集的聪明应用)
- 简单并查集模板
- 并查集模板
- 并查集模板
- 并查集及模板
- 最小生成树Kruskal算法【模板】 与 并查集 例题:简单 poj 2485 Highways
- Visual Studio 2013新建ASP.NET项目使用Empty模板,在页面中使用验证控件出错的解决方案
- POJ 2524 宗教信仰 并查集 基础模板
- POJ1182食物链【并查集+根节点的偏移】
- POJ-1611 The Suspects (并查集模板题)
- C++ 并查集模板:找矩阵中'0'区域的个数
- 并查集模板
- poj 2236 Wireless Network(并查集模板题)
- 并查集模板