#include #include #include #include using namespace std; const int INF = 0x3f3f3f3f; const int N = 502; int n, m, w; int g[N][N]; // floyd判断是否存在负圈 bool floyd() { for (int k = 1; k <= n; k++) for (int i = 1; i <= n; i++) if (g[i][k] != INF) { // 优化 for (int j = 1; j <= n; j++) if (g[i][j] > g[i][k] + g[k][j]) g[i][j] = g[i][k] + g[k][j]; if (g[i][i] < 0) return true; // 发现负圈 } return false; } int main() { int T; cin >> T; while (T--) { cin >> n >> m >> w; memset(g, INF, sizeof g); // 初始化邻接矩阵 // 双向正值边 while (m--) { int a, b, c; cin >> a >> b >> c; // 注意坑:重边 g[a][b] = g[b][a] = min(c, g[a][b]); } // 单向负值边 while (w--) { int a, b, c; cin >> a >> b >> c; g[a][b] = -c; // 负值边 } if (floyd()) puts("YES"); else puts("NO"); } return 0; }