社区讨论

除了最后一个全wa,vector建图

P5960【模板】差分约束参与者 3已保存回复 5

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@lyhhltyf
此快照首次捕获于
2024/07/12 00:32
2 年前
此快照最后确认于
2024/07/12 09:41
2 年前
查看原帖
C
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll, ll> pll;
const int N = 1e4+5,M =1e4+5,mod = 7;
ll n, m;
struct Edge {
    ll to, w;
};
vector<Edge> G[N];

ll dis[N], cnt[N];
bool vis[N];
bool spfa(ll s) {
    memset(dis, 127, sizeof(dis));
    dis[s] = 0;
    queue<ll> que;
    que.push(s);
    vis[s] = 1;
    while (que.size()) {
        s = que.front();
        que.pop();
        vis[s] = 0;
        for (Edge p :G[s]) {
            ll to = p.to, w = p.w;
            if (dis[to] > dis[s] +w) {
                dis[to] = dis[s] + w;
                cnt[to] = cnt[s] + 1;
                if (cnt[to]>=n+1)
                    return false;
                if (!vis[to]) {
                    que.push(to);
                    vis[s] = 1;
                }
            }
        }
    }
    return true;
}

int main()
{
    cin >> n >> m;
    for (ll i = 1; i <= m;i++) {
        ll fr, to, w;
        cin >> to >> fr >> w;
        G[fr].push_back({to, w});
    }
    //创建源点
    for (ll i = 1; i <= n;i++) {
        G[0].push_back({i, 0});
    }

   if (spfa(0)) {
       for (ll i = 1; i <= n;i++) {
           cout << dis[i] << " ";
       }
   }else {
    cout << "NO" << endl;
   }

    return 0;
}

回复

5 条回复,欢迎继续交流。

正在加载回复...