poj1182 Food Chain
2014-03-24 21:55
232 查看
链接:http://poj.org/problem?id=1182
题意应该没什么问题,因为是中文的。自己写了一个TLE。搞不懂。自己能优化的地方就只有路径的修改,没有其它方法更快了。
然后看解题报告,真不简单啊。即使看了解题报告也不大清楚。主要是公式自己也没推。这里放两个解题报告吧。以后领悟了,能看看。
http://blog.csdn.net/c0de4fun/article/details/7318642/
http://blog.csdn.net/tiantangrenjian/article/details/7085575
代码基本上是抄袭的啦,不多说了。
题意应该没什么问题,因为是中文的。自己写了一个TLE。搞不懂。自己能优化的地方就只有路径的修改,没有其它方法更快了。
然后看解题报告,真不简单啊。即使看了解题报告也不大清楚。主要是公式自己也没推。这里放两个解题报告吧。以后领悟了,能看看。
http://blog.csdn.net/c0de4fun/article/details/7318642/
http://blog.csdn.net/tiantangrenjian/article/details/7085575
代码基本上是抄袭的啦,不多说了。
#include<stdio.h> #include<string.h> #define MAXN 50005 int set[MAXN]; int rank[MAXN]; int find(int x) { if(x!=set[x]) { int fx=find(set[x]); rank[x]=(rank[x]+rank[set[x]])%3; set[x]=fx; } return set[x]; } int merge(int x,int y,int type) { int fx=find(x); int fy=find(y); if(fx==fy) { if((rank[y]-rank[x]+3)%3!=type) return 0; else return 1; } set[fy]=fx; rank[fy]=(rank[x]-rank[y]+type+3)%3; return 1; } int main() { int n,m,i,ans; int d,x,y; scanf("%d%d",&n,&m); for(i=1;i<=n;i++) set[i]=i; memset(rank,0,sizeof(rank)); ans=0; for(i=0;i<m;i++) { scanf("%d%d%d",&d,&x,&y); if(x>n||y>n||(x==y&&d==2)) ans++; else if(!merge(x,y,d-1)) ans++; } printf("%d\n",ans); return 0; }
相关文章推荐
- 并查集的使用 POJ 1182
- POJ 1182食物链(并查集)
- Poj 1182 食物链--带边权的并查集
- poj 1182 里面食物链题目
- nyist 207&&poj 1182 食物链(并查集)
- poj 1182 --食物链(经典并查集)
- poj 1182 食物链 并查集
- POJ 1182 - 食物链
- POJ 1182 食物链
- poj 1182 【经典并查集】 和【不一样的解法】
- poj 1182 食物链 并查集的又一个用法
- poj 1988 Cube Stacking (poj 1182 食物链(转))
- POJ 1182 食物链
- POJ 1182 食物链 (带权并查集)
- POJ-1182 食物链 (带权并查集)
- POJ 1182:食物链
- POJ 1182 / Noi 01 食物链 (并查集&代码优化)
- 【POJ】1182 - 食物链(带权并查集,单数据)
- poj 1182 食物链 经典并查集
- 洛谷P2024 食物链 (POJ 1182)