poj 食物链
来源:互联网 发布:sql获取当前系统时间 编辑:程序博客网 时间:2024/06/06 03:22
比基础的并查集有些进步。
在下面这个链接中有详细解释:
http://blog.csdn.net/ditian1027/article/details/20804911
对于每两个动物的关系,都是先推与最终的关系,在逆推与另一个的关系;
num中存的都是与最终节点的关系;
#include<stdio.h>#include<string.h>#include<iostream>using namespace std;const int maxn=50000+10;struct node{ int q,num;}s[maxn];void qq(int n){ for(int i=1;i<=n;i++) { s[i].q=i; s[i].num=0; }}int find(int y){ if(y==s[y].q) return y; int t=s[y].q; s[y].q=find(s[y].q); s[y].num=(s[t].num+s[y].num)%3; return s[y].q;}void show(int q,int w,int e)//合并集合{ int tt=find(q); int rr=find(w); s[rr].q=tt; s[rr].num=(s[q].num-s[w].num+3+(e-1))%3;}int main(){ int a,b,n,m,g; scanf("%d %d",&a,&b); qq(a); int ans=0; while(b--) { scanf("%d%d%d",&n,&m,&g); if(m>a||g>a) {ans++;continue;} if(n==2&&m==g) {ans++;continue;} if(find(m)==find(g)) { if(n==1&&s[m].num!=s[g].num) ans++; if(n==2&&(s[m].num+1)%3!=s[g].num) ans++; } else show(m,g,n); } printf("%d\n",ans); return 0;}
0 0
- POJ - 食物链
- poj 食物链
- 食物链 poj
- poj 食物链
- 食物链 POJ
- 食物链 POJ
- poj 食物链
- 食物链 POJ
- 食物链 POJ
- 食物链(POJ
- 食物链 POJ
- 食物链 POJ
- 食物链 POJ
- poj 1182 食物链
- poj 1182 食物链
- poj 1182 食物链(转)
- poj 1182 食物链
- poj 1182 食物链
- 求二进制数中1的个数
- CGI原理解析之二------WEB服务和CGI交互数据
- linux下C语言多线程编程
- The Swift Programming Language6
- 枚举类型的单例模式(java)
- poj 食物链
- 要开始博客了!
- 2014大一下学期总结
- 关于memset()
- Linux进程间通信——使用信号
- Comparator 与 Comparable 的区别
- 社区分享
- 【增】使用ado.net 新增数据
- Minx内核中scanf函数实现代码