食物链
Posted aze-qwq
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了食物链相关的知识,希望对你有一定的参考价值。
https://www.luogu.org/problemnew/show/P2024
#include<cstdio> int f[50005]; int r[50005]; void init(int n){ for(int x=1; x<=n; x++){ f[x]=x; r[x]=0; } } int find(int x) { if(x==f[x]) return x; int t = f[x]; f[x]=find(f[x]); r[x]=(r[x]+r[t])%3; return f[x]; } void merge(int x, int y, int d){ int fx=find(x); int fy=find(y); f[fy]=fx; r[fy]=(r[x]-r[y]+3+(d-1))%3; } int main(){ int n, m; scanf("%d%d", &n, &m); init(n); int ans=0; int d, x, y; while(m--){ scanf("%d%d%d", &d, &x, &y); if(x>n || y>n || (d==2 && x==y)) ans++; else if(find(x)==find(y)) { if(d==1 && r[x]!=r[y]) ans++; if(d==2 && (r[x]+1)%3!=r[y]) ans++; } else merge(x, y, d); } printf("%d ", ans); return 0; }
以上是关于食物链的主要内容,如果未能解决你的问题,请参考以下文章
带权并查集(含种类并查集)经典模板 例题:①POJ 1182 食物链(经典)②HDU - 1829 A bug's life(简单) ③hihoCoder 1515 : 分数调查(示例代码(代