解题思路:
/*
带权并查集模板
*/
注意事项:
参考代码:
#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语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:525 |
简单的a+b (C++语言代码)浏览:886 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:462 |
P1000 (C语言代码)浏览:895 |
Tom数 (C语言代码)浏览:749 |
C二级辅导-温度转换 (C语言代码)浏览:798 |
C二级辅导-公约公倍 (C语言代码)浏览:532 |
C语言程序设计教程(第三版)课后习题12.1 (C语言代码)浏览:682 |
班级人数 (C语言代码)浏览:970 |
C语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:462 |