您的位置:首页 > 其它

hdu 3038 并查集

2013-11-10 13:57 176 查看
题目:给出一些询问,[l,r]的和为s,问有多少个是错的

//并查集 ,,sum[a]表示a与父亲这条路径上的和
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

const int maxn = 2e5 + 5;
int fa[maxn], sum[maxn];
int n, m, l, r, s;
int findFa(int x){
if (x != fa[x]){
int t = fa[x];
fa[x] = findFa(fa[x]);
sum[x] += sum[t];
}
return fa[x];
}
int main(){
while (~scanf("%d%d", &n, &m)){
for (int i = 0; i <= n; ++i){
fa[i] = i;
sum[i] = 0;
}
int ans = 0;
while (m--){
scanf("%d%d%d", &l, &r, &s);
l --;
int pa = findFa(l), pb = findFa(r);
if (pa == pb){
if (sum[r] - sum[l] != s) ans++;
}
else {
fa[pb] = pa;
sum[pb] = sum[l] - sum[r] + s;
}
}
printf("%d\n", ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: