#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
struct Edge
{
int a;
int b;
int t;
}e[2500*2 + 1000];
int res[2500 + 10];
bool ballman(Edge *ed, int * res,int n, int num, int s)
{
for( int i = 1; i<= n; i++)
res[i] = 0x3f3f;
res[s] = 0;
for( int i = 1; i<= n; i++)
{
for( int j = 1; j <= num; j++)
{
if(res[e[j].b] > res[e[j].a] + e[j].t)
res[e[j].b] = res[e[j].a] + e[j].t;
}
}
for( int i = 1; i<= n; i++)
{
for( int j = 1; j<= num; j++)
{
if(res[e[j].b] > res[e[j].a] + e[j].t)
return true;
}
}
return false;
}
int main()
{
int f,n,m,s,ed,tt,w;
int j, i;
scanf("%d",&f);
while(f--)
{
scanf("%d %d %d",&n, &m, &w);
for( i = 1; i<=m; i++)
{
scanf("%d %d %d", &s, &ed, &tt);
e[i].a = s;
e[i].b = ed;
e[i].t = tt;
e[m+i].a = ed;
e[m+i].b = s;
e[m+i].t = tt;
}
for( i = 1; i <= w; i++)
{
scanf("%d %d %d",&s, &ed, &tt);
e[m+m+i].a = s; e[m+m+i].b = ed; e[m+m+i].t = -tt;
}
if(ballman(e, res, n, 2*m + w, 1))
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}
#include <stdio.h>
#include <string.h>
using namespace std;
struct Edge
{
int a;
int b;
int t;
}e[2500*2 + 1000];
int res[2500 + 10];
bool ballman(Edge *ed, int * res,int n, int num, int s)
{
for( int i = 1; i<= n; i++)
res[i] = 0x3f3f;
res[s] = 0;
for( int i = 1; i<= n; i++)
{
for( int j = 1; j <= num; j++)
{
if(res[e[j].b] > res[e[j].a] + e[j].t)
res[e[j].b] = res[e[j].a] + e[j].t;
}
}
for( int i = 1; i<= n; i++)
{
for( int j = 1; j<= num; j++)
{
if(res[e[j].b] > res[e[j].a] + e[j].t)
return true;
}
}
return false;
}
int main()
{
int f,n,m,s,ed,tt,w;
int j, i;
scanf("%d",&f);
while(f--)
{
scanf("%d %d %d",&n, &m, &w);
for( i = 1; i<=m; i++)
{
scanf("%d %d %d", &s, &ed, &tt);
e[i].a = s;
e[i].b = ed;
e[i].t = tt;
e[m+i].a = ed;
e[m+i].b = s;
e[m+i].t = tt;
}
for( i = 1; i <= w; i++)
{
scanf("%d %d %d",&s, &ed, &tt);
e[m+m+i].a = s; e[m+m+i].b = ed; e[m+m+i].t = -tt;
}
if(ballman(e, res, n, 2*m + w, 1))
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}