解题思路:
/*
带权并查集模板
*/
注意事项:
参考代码:
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
int fa[100005];
ll d[100005];
void initset(int n){
for(int i=0;i<=n;i++){
fa[i] = i;
d[i] = 0;
}
}
int find(int x){
if(x != fa[x]){
int t = fa[x];
fa[x] = find(fa[x]);
d[x] += d[t];
}
return fa[x];
}
void unionset(int x,int y,ll v){
int a = find(x);
int b = find(y);
fa[a] = b;
d[a] = d[y]+v-d[x];
}
int main(){
int n,m,q;
scanf("%d%d%d",&n,&m,&q);
initset(n);
for(int i=0;i<m;i++){
int a,b;
ll c;
scanf("%d%d%lld",&a,&b,&c);
a--;
unionset(a,b,c);
}
for(int i=0;i<q;i++){
int a,b;
scanf("%d%d",&a,&b);
a--;
int na = find(a);
int nb = find(b);
if(na == nb){
ll ans = d[a]-d[b];
cout<<ans;
}
else{
cout<<"UNKNOWN";
}
cout<<"\n";
}
}
0.0分
0 人评分
母牛的故事 (C语言代码)浏览:478 |
C语言程序设计教程(第三版)课后习题6.2 (C语言代码)浏览:1432 |
WU-判定字符位置 (C++代码)浏览:1471 |
哥德巴赫曾猜测 (C语言代码)浏览:2562 |
C语言程序设计教程(第三版)课后习题5.6 (C语言代码)浏览:580 |
最小公倍数 (C语言代码)浏览:1105 |
1118(求助_已解决)浏览:351 |
C语言训练-8除不尽的数 (C语言代码)浏览:1469 |
数列有序 (C语言代码)浏览:974 |
拆分位数 (C语言代码)浏览:464 |