带权并查集
Posted carcar
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带权并查集相关的知识,希望对你有一定的参考价值。
例题一链接:
http://acm.hdu.edu.cn/showproblem.php?pid=3038
题意:
数据范围:
$1leq n leq 100$
分析:
AC代码:
#include<bits/stdc++.h> #define ll long long #define pii pair<int,int> using namespace std; const int maxn=2e5+7; const int mod=1e9+7; ll offe[maxn],boss[maxn]; int fin(int x){ if(x==boss[x])return x; int z=boss[x]; int y=fin(boss[x]); offe[x]+=offe[z]; boss[x]=y; return y; } int main() { int n,m,ans=0; while(scanf("%d %d",&n,&m)==2){ ans=0; for(int i=0;i<=n;i++)boss[i]=i,offe[i]=0; for(int i=1;i<=m;i++){ int l,r,x; scanf("%d %d %d",&l,&r,&x); l--; if(fin(l)==fin(r)){ if(offe[l]-offe[r]!=x)ans++; }else{ int fl=fin(l),fr=fin(r); boss[fl]=fr; offe[fl]=x-offe[l]+offe[r]; } } printf("%d ",ans); } return 0; }
以上是关于带权并查集的主要内容,如果未能解决你的问题,请参考以下文章