MnZn求助
  • 板块灌水区
  • 楼主litjohn
  • 当前回复14
  • 已保存回复14
  • 发布时间2024/2/24 09:22
  • 上次更新2024/2/24 11:57:02
查看原帖
MnZn求助
537934
litjohn楼主2024/2/24 09:22
#include <bits/stdc++.h>

using namespace std;
int t, c, ts, te, dist[2505], cnt[2505];
struct edge {
    int v, w;
};
struct node {
    int num, dis;
};
vector<vector<edge>> e;
queue<node> q;

void bfs(int s) {
    cnt[s] = 1;
    dist[s] = 0;
    q.push({s, 0});
    while (!q.empty()) {
        node p = q.front();
        q.pop();
        cnt[p.num]++;
        for (auto i: e[p.num]) {
            if (cnt[i.v] < t - 1 && dist[i.v] > p.dis + i.w) {
                dist[i.v] = p.dis + i.w;
                q.push({i.v, dist[i.v]});
            }
        }
    }
}

int main() {
    memset(dist, 0x7f, sizeof(dist));
    cin >> t >> c >> ts >> te;
    e.resize(c + 5);
    for (int i = 0; i < c; ++i) {
        int rs, re, w;
        cin >> rs >> re >> w;
        e[rs].push_back({re, w});
        e[re].push_back({rs, w});
    }
    bfs(ts);
    cout << dist[te];
    return 0;
}

这是用于解决 http://ybt.ssoier.cn:8088/problem_show.php?pid=1379 的程序,基本上是把dijkstra的优先队列换成了普通队列,我想问的主要有两点:

  1. 这个算法正确吗?(已经AC原题但还没有证明)
  2. 以前有这种写法吗?如果有,它叫什么?

希望有大佬解答!谢谢!

2024/2/24 09:22
加载中...