码字如下:
#include <bits/stdc++.h>
using namespace std;
int n, m, h[10001], cnt[10001], c, s[10001], t;
bool ex[10001], f;
struct Egde{int dis, nxt, to;}e[200001];
void add (int u, int v, int d)
{
e[++ c].nxt = h[u];
e[c].to = v;
e[c].dis = d;
h[u] = c;
}
queue <int> q;
void spfa ()
{
for (int i = 1; i <= n; ++ i)
{
q.push (i);
ex[i] = 1;
}
while (! q.empty ())
{
int u = q.front ();
q.pop ();
ex[u] = 0;
for (int i = h[u]; i ; i = e[i].nxt)
{
int v = e[i].to;
if (s[u] + e[i].dis < s[v])
{
s[v] = s[u] + e[i].dis;
if (! ex[v])
{
cnt[v] = cnt[u] + 1;
if (cnt[v] >= n)
{
f = 1;
return;
}
ex[v] = 1;
q.push (v);
}
}
}
}
}
signed main ()
{
scanf ("%d", &t);
++ t;
while (-- t)
{
f = 0;
memset (ex, 0, sizeof (ex));
memset (s, 0x3f, sizeof (s));
memset (e, 0, sizeof (e));
memset (cnt, 0, sizeof (cnt));
memset (h, 0, sizeof (h));
while (! q.empty ())q.pop ();
scanf ("%d %d", &n, &m);
s[1] = 0;
for (int i = 0; i < m; ++ i)
{
int u, v, d;
scanf ("%d %d %d", &u, &v, &d);
add (u, v, d);
if (d >= 0)add (v, u, d);
}
spfa ();
if (f)puts ("YES");
else puts ("NO");
}
return 0;
}
并且手残下载了wa的数据
1
4 3
2 3 -1
3 4 -1
4 2 -1
输出竟然是NO,这是怎么回事?