# include<iostream>
struct Edge {
int src;
int dst;
int distance;
};
Edge e[5250];
int main() {
int F, N, M, W;
std::cin >> F;
for (int q = 0; q < F; q++) {
std::cin >> N >> M >> W;
int A, B, C;
for (int i = 0; i < M; i++) {
std::cin >> A >> B >> C;
A--;
B--;
e[i].src = A;
e[i].dst = B;
e[i].distance = C;
e[i + M].src = B;
e[i + M].dst = A;
e[i + M].distance = C;
}
for (int i = 2 * M; i < 2 * M + W; i++) {
std::cin >> A >> B >> C;
A--;
B--;
e[i].src = A;
e[i].dst = B;
e[i].distance = -C;
}
int distance[501];
for (int i = 1; i <= N; i++) {
distance[i] = 0;
}
// 进行N-1次松弛操作
int flag;
for (int i = 0; i < N - 1; i++) {
flag = 0;
for (int j = 0; j < 2 * M + W; j++) {
if (distance[e[j].dst] < distance[e[j].src] - e[j].distance) {
distance[e[j].dst] = distance[e[j].src] - e[j].distance;
flag = 1;
}
}
if (flag == 0) {
break;
}
}
// 第N次松弛操作,如果还能松弛,说明存在正环
flag = 0;
for (int i = 0; i < 2 * M + W; i++) {
if (distance[e[i].dst] < distance[e[i].src] - e[i].distance) {
flag = 1;
break;
}
}
if (flag == 1) {
std::cout << "YES" << std::endl;
} else {
std::cout << "NO" << std::endl;
}
}
}
一本通1507:虫洞 Wormholes
于 2024-03-02 23:26:01 首次发布