0分求调
查看原帖
0分求调
567484
ostresc楼主2023/8/2 10:59
#include <bits/stdc++.h>
#define int long long
using namespace std;

const int N = 2e3 + 5;
int t, n, m, dis[N], cnt[N];
bool vis[N];

struct Node
{
    int to, w;
};vector<Node> e[N];

void spfa()
{
    memset(dis, 0x3f, sizeof dis), memset(vis, 0, sizeof vis), memset(cnt, 0, sizeof cnt);
    queue<int> q;
    q.push(1), dis[1] = 0, vis[1] = true;
    while (!q.empty())
    {
        int u = q.front(); q.pop(), vis[u] = false;
        for (int i = 0; i < e[u].size(); i++)
        {
            int v = e[u][i].to, w = e[u][i].w;
            if (dis[v] > dis[u] + w)
            {
                dis[v] = dis[u] + w, cnt[v] = cnt[u] + 1;
                if (cnt[v] >= n)
                {
                    puts("Yes");
                    return;
                }
                if (!vis[v])
                    vis[v] = true, q.push(v);
            }
        }
    }
    puts("No");
}

signed main()
{
    cin >> t;
    while (t--)
    {
        cin >> n >> m;
        for (int i = 1; i <= n; i++)
            e[i].clear();
        for (int i = 1; i <= m; i++)
        {
            int u, v, w;
            cin >> u >> v >> w;
            e[u].push_back({v, w});
            if (w >= 0)
                e[v].push_back({u, w});
        }
        spfa();
    }
    return 0;
}
2023/8/2 10:59
加载中...