using namespace std;
int T;
int n,m;
const int N=2e3+500;
struct Edge {
int to,w;
};
vector<Edge> a[N];
queue <int> q;
int dis[N],vis[N],s[N];
int spfa(int tot) {
memset(dis,0x3f3f3f3f,sizeof dis);
memset(vis,0,sizeof vis);
memset(s,0,sizeof s);
dis[1]=0; vis[1]=1;
while(!q.empty()) q.pop();
q.push(1);
while(!q.empty()) {
int temp=q.front(); q.pop(); vis[temp]=0;
for(int i=0;i<a[temp].size();i++) {
int to=a[temp][i].to,w=a[temp][i].w;
if(dis[to]>dis[temp]+w){
dis[to]=dis[temp]+w;
if(!vis[to]) {
if(++s[to]>=tot) return 1;
vis[to]=1;
q.push(to);
}
}
}
}
return 0;
}
int main() {
cin>>T;
while(T--) {
for(int i=1;i<=N;i++) {
vector<Edge>().swap(a[i]);
}
cin>>n>>m;
for(int i=1;i<=m;i++) {
int x,y,w;
cin>>x>>y>>w;
Edge t1; t1.to=y; t1.w=w;
a[x].push_back(t1);
if(w>=0) {
Edge t2; t2.to=x; t2.w=w;
a[y].push_back(t2);
}
}
if(spfa(n)==1) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}```