2.20s 怎么办,求助。
提交记录
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 3e5 + 10;
int n, m;
int head[N], to[N], nxt[N], val[N], cnt = -1;
void add(int u, int v, int w)
{
nxt[++cnt] = head[u];
head[u] = cnt;
to[cnt] = v;
val[cnt] = w;
}
bool vis[N];
int dis[N];
void spfa(int u, bool &flg)
{
if(flg) return;
vis[u] = 1;
for(int i = head[u]; ~i && !flg; i = nxt[i])
{
int v = to[i];
if(dis[u] + val[i] < dis[v])
{
dis[v] = dis[u] + val[i];
if(!vis[v]) spfa(v, flg);
else
{
flg = 1;
cout << "YES\n";
return;
}
}
}
vis[u] = 0;
}
void solve()
{
cnt = -1;
cin >> n >> m;
for(int i = 1; i <= n; i++)
{
head[i] = -1, dis[i] = 1e9;
vis[i] = 0;
}
for(int i = 1; i <= m; i++)
{
int u, v, w;
cin >> u >> v >> w;
if(w >= 0)
{
add(u, v, w), add(v, u, w);
}
else
{
add(u, v, w);
}
}
bool flg = 0;
dis[1] = 0;
spfa(1, flg);
if(!flg)
{
cout << "NO\n";
}
// for(int i = 1; i <= n; i++){
// cout << dis[i] << " ";
// }
}
signed main()
{
// freopen("P3385_9.in", "r", stdin);
// freopen("P.out", "w", stdout);
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
int t;
cin >> t;
while(t--) solve();
return 0;
}