听取WA声一片,求条QAQ
#include <bits/stdc++.h>
using namespace std;
const int N = 30005;
int head[N], cnt, dis[N];
bool vis[N];
int T;
int n, m;
struct node {
int nxt, v, w;
} edge[N];
void add_edge(int u, int v, int w) {
edge[++cnt].nxt = head[u];
head[u] = cnt;
edge[cnt].v = v;
edge[cnt].w = w;
}
int sum[N];
bool SPFA() {
memset(dis, 0x3f, sizeof(dis));
memset(sum, 0, sizeof(sum));
memset(vis, 0, sizeof(vis));
dis[1] = 0;
vis[1] = 1;
queue<int> q;
q.push(1);
while (!q.empty()) {
int u = q.front();
q.pop();
vis[u] = 0;
for (int i = head[u]; i; i = edge[i].nxt) {
int v = edge[i].v;
if (dis[v] > dis[u] + edge[i].w) {
dis[v] = dis[u] + edge[i].w;
sum[v] = sum[u] + 1;
if (sum[v] >= n) return 1;
if (!vis[v]) {
vis[v] = 1;
q.push(v);
}
}
}
}
return 0;
}
int main() {
int u, v, w;
cin >> T;
while (T--) {
cin >> n >> m;
cnt = 0;
memset(head, 0, sizeof(head));
for (int i = 1; i <= m; i++) {
cin >> u >> v >> w;
add_edge(u, v, w);
}
if (SPFA()) puts("Yes");
else puts("No");
}
return 0;
}