0 pts 求助(玄关)
查看原帖
0 pts 求助(玄关)
919410
Pollococido楼主2025/7/25 16:37
#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
int t, n, m, s;
bool vis[510];
int dis[510], sum[510];
struct node {
    int v;
    int w;
};
vector<node> g[510];
bool SPFA(int s) {
    queue<int> q;
    vis[s] = true;
    dis[s] = 0;
    sum[s] = 1;
    q.push(s);
    while (!q.empty()) {
        int x = q.front();
        q.pop();
        vis[x] = false;
        for (auto c : g[x]) {
            int v = c.v;
            if (dis[v] > dis[x] + c.w) {
                dis[v] = dis[x] + c.w;
                if (!vis[v]) {
                    sum[v]++;
                    if (sum[v] >= n) {
                        return false;
                    }
                    vis[v] = true;
                    q.push(v);
                }
            }
        }
    }
    return true;
}

signed main() {
    cin.tie(0), cout.tie(0);
    ios::sync_with_stdio(false);
    cin >> t;
    while (t--) {
        cin >> n >> m >> s;
        for (int i = 0; i <= 500; i++) g[i].clear();
        for (int i = 1; i <= m; i++) {
            int u, v, w;
            cin >> u >> v >> w;
            g[u].push_back({v, w});
            g[v].push_back({u, w});
        }
        for (int i = 1; i <= s; i++) {
            int u, v, w;
            cin >> u >> v >> w;
            g[u].push_back({v, -w});
        }
        memset(vis, false, sizeof vis);
        memset(sum, 0, sizeof sum);
        memset(dis, 0x3f, sizeof dis);
        if (SPFA(1)) cout << "No" << endl;
        else cout << "Yes" << endl;
    }
    return 0;
}

过样例但是 0 pts,求助。

2025/7/25 16:37
加载中...