【poj 1182】 食物链 题解&代码(C++)
来源:互联网 发布:新东方烹饪怎么样知乎 编辑:程序博客网 时间:2024/05/19 23:12
经典的并查集关系类问题,还是类似 poj1703 的方法,用x+n表示 x所吃的集合,用x+2×n表示 吃x的集合 ,然后用并查集连连连就行。。。
#include<iostream>#include<string.h>#include<stdio.h>using namespace std;int fa[509999];inline void chushihua(int n){ for (int i=1;i<=n;i++) fa[i]=i;}int find(int x){ if (fa[x]==x) return x; return fa[x]=find(fa[x]);}int unio(int x,int y){ return fa[find(x)]=find(y);}int main(){ int n,m,a,b,c; scanf("%d%d",&n,&m); chushihua(3*n); int ans=0; for (int i=1;i<=m;i++) { scanf("%d%d%d",&a,&b,&c); if (b>n || c>n || (a==2&&b==c) || b<=0 || c<=0) {ans++;continue;} if (a==1) { if (find(b)!=find(c) && find(c+n)!=find(b) && find(c+2*n)!=find(b) && find(c)!=find(b+n) &&find(c)!=find(b+n+n)) { unio(b,c); unio(b+n,c+n); unio(b+2*n,c+2*n); } else if (find(b)==find(c)) continue; else if (find(b)!=find(c) && (find(c+n)==find(b) || find(c+2*n)==find(b) || find(c)==find(b+n) || find(c)==find(b+n+n))) ans++; } else if (a==2) { if (find(b)==find(c) || find(c)==find(b+n)) {ans++;continue;} else { unio(c+n,b); unio(b+2*n,c); unio(b+n,c+n+n); } } } cout<<ans<<endl;}
0 0
- 【poj 1182】 食物链 题解&代码(C++)
- 【poj 1182】 食物链 题解&代码(C++)
- 【poj 2352】Stars 题意&题解&代码(C++)
- 【poj 1724】ROADS 题意&题解&代码(C++)
- 【poj 1191】棋盘分割 题解&代码(C++)
- 【poj 1925】Spiderman 题意&题解&代码(C++)
- [题解] POJ 1182 食物链 (并查集)
- POJ 1182 食物链 Union Find题解
- poj 1182 (食物链)
- POJ 1182(食物链)
- 食物链(POJ-1182)
- 食物链(poj--1182)
- 食物链(POJ-1182)
- 【POJ 1001】Exponentiation 题解&代码(c++)
- 【poj 1003】Hangover 题解&代码(c++)
- 【poj 3368】Frequent values 题意&题解&代码(C++)
- 【poj 3321】Apple Tree 题意&题解&代码(C++)
- 【poj 1195】Mobile phones 题意&题解&代码(C++)
- 数据库对 日期格式数据 操作处理
- ios进程间通信问题之二----XPC Service
- EventBus的使用和原理剖析
- 【poj 2352】Stars 题意&题解&代码(C++)
- CF236 B. Easy Number Challenge【求约数个数】
- 【poj 1182】 食物链 题解&代码(C++)
- 按引用传递的
- jQuery立即调用表达式
- QuartZ--Spring中定时任务的实现
- linux 命令route add default dev eth0和route add default gw * dev eth0的区别?
- 书已出,只要能帮助或影响1000人,也算是功德圆满
- arc/非arc转换及注意事项
- js的this指向
- 运行时的C程序