本地编译没问题 也可以过样例 洛谷编译失败
查看原帖
本地编译没问题 也可以过样例 洛谷编译失败
976912
BDCYI楼主2024/11/27 12:56
#include <bits/stdc++.h>
using namespace std;

const int maxn = 1e5;
const int maxm = 1e5;

struct edge
{
    int to, next, dis;
};

edge edges[maxm];
int index = 0, head[maxn], dis[maxn], cnt[maxn];
bool vis[maxn];

void add_edge(int u, int v, int dis)
{
    index++;
    edges[index].to = v;
    edges[index].dis = dis;
    edges[index].next = head[u];
    head[u] = index;
}

void SPFA(int n)
{
    queue<int> q;
    q.push(1);
    vis[1] = true;
    cnt[1]++;
    dis[1] = 0;
    while (!q.empty())
    {
        int t = q.front();
        q.pop();
        vis[t] = false;
        for (int i = head[t]; i; i = edges[i].next)
        {
            int y = edges[i].to;
            int dis_t_y = edges[i].dis;
            if (dis[y] > dis[t] + dis_t_y)
            {
                dis[y] = dis[t] + dis_t_y;
                if (vis[y] == false)
                {
                    cnt[y]++;
                    if (cnt[y] >= n)
                    {
                        cout << "YES" << endl;
                        return;
                    }
                    q.push(y);
                    vis[y] = true;
                }
            }
        }
    }
    cout << "NO" << endl;
}

int main()
{
    int T;
    cin >> T;
    while (T--)
    {
        int n, m;
        cin >> n >> m;
        for (int i = 0; i <= n; i++)
            dis[i] = INT_MAX;
        index = 0;
        memset(cnt, 0, sizeof(cnt));
        memset(vis, 0, sizeof(vis));
        memset(edges, 0, sizeof(edges));
        memset(head, 0, sizeof(head));
        int u, v, w;
        for (int i = 1; i <= m; i++)
        {
            cin >> u >> v >> w;
            add_edge(u, v, w);
            if (w >= 0)
                add_edge(v, u, w);
        }
        SPFA(n);
    }
    return 0;
}
2024/11/27 12:56
加载中...