You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.0 KiB
51 lines
1.0 KiB
#include <bits/stdc++.h>
|
|
|
|
using namespace std;
|
|
|
|
const int N = 100005;
|
|
int p[N];
|
|
int score[N];
|
|
|
|
int find(int x) {
|
|
if (x != p[x]) {
|
|
int t = p[x];
|
|
p[x] = find(p[x]);
|
|
score[x] += score[t];
|
|
}
|
|
return p[x];
|
|
}
|
|
|
|
//https://blog.csdn.net/yjr3426619/article/details/82315133
|
|
int main() {
|
|
//输入+输出重定向
|
|
freopen("../AcWing/N5/HihoCoder1515.txt", "r", stdin);
|
|
|
|
int n, m, q;
|
|
scanf("%d%d%d", &n, &m, &q);
|
|
for (int i = 1; i <= n; i++) {
|
|
p[i] = i;
|
|
}
|
|
while (m--) {
|
|
int x, y, s;
|
|
scanf("%d%d%d", &x, &y, &s);
|
|
int px = find(x);
|
|
int py = find(y);
|
|
if (px != py) {
|
|
p[px] = py;
|
|
score[px] = -score[x] + score[y] + s;
|
|
}
|
|
}
|
|
while (q--) {
|
|
int x, y;
|
|
scanf("%d%d", &x, &y);
|
|
if (find(x) != find(y)) {
|
|
printf("-1\n");
|
|
} else {
|
|
printf("%d\n", score[x] - score[y]);
|
|
}
|
|
}
|
|
|
|
//关闭文件
|
|
fclose(stdin);
|
|
return 0;
|
|
} |