解题思路:
/*
带权并查集模板
*/
注意事项:
参考代码:
#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语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复