欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

并查集算法

时间:2023-05-28

int find(int x){ if(p[x] != x) p[x] = find(p[x]); return p[x];}

食物链

#includeusing namespace std;const int N = 50005;int n,K,fake;int p[N],d[N];int find(int x){ if(p[x] != x) { int u = find(p[x]); d[x] += d[p[x]]; p[x] = u; } return p[x];}int main(){ cin>>n>>K; for(int i = 1; i <= n; i ++ ) p[i] = i; while(K--) { int t,x,y; cin>>t>>x>>y; if(x > n || y > n) fake++; else { int px = find(x),py = find(y); if(t == 1) { if(px == py && (d[y] - d[x]) % 3) fake++; if(px != py) { p[px] = py; d[px] = d[y] - d[x]; } } if(t == 2) { if(px == py && (d[x] - d[y] - 1) % 3) fake++; if(px != py) { p[px] = py; d[px] = d[y] - d[x] + 1; } } } } cout<

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。