求助各位大佬,这为啥RE4,7,8,9
查看原帖
求助各位大佬,这为啥RE4,7,8,9
1104657
RQH1234楼主2023/10/29 01:36
#include <bits/stdc++.h>
using namespace std;
int N, M, K;
int d[3000005] = {0};
struct edge
{
    int to;
    int w;
    edge() {}
    edge(int to, int w) : to(to), w(w) {}
};
struct node
{
    int id;
    int dis;
    bool operator<(const node B) const
    {
        return dis > B.dis;
    }
    node() {}
    node(int id, int dis) : id(id), dis(dis) {}
};
short int done[3000005] = {0};
void dijkstra(int x);
vector<edge> vec[3000005];
const int INF = 1e9;
int main()
{
    int s, t;
    for (int i = 0; i <= 3000000; i++)
    {
        d[i] = INF;
    }
    scanf("%d%d%d", &N, &M, &K);
    scanf("%d%d", &s, &t);
    s++;
    t++;
    for (int i = 1; i <= M; i++)
    {
        int x, y, w;
        scanf("%d%d%d", &x, &y, &w);
        x++;
        y++;
        for (int j = 0; j <= K; j++)
        {
            vec[x + j * N].push_back(edge(y + j * N, w));
            vec[y + j * N].push_back(edge(x + j * N, w));
        }
    }
    for (int i = 0; i <= K - 1; i++)
    {
        for (int j = 1; j <= N; j++)
        {
            int si = vec[j].size();
            for (int k = 0; k < si; k++)
            {
                vec[j + i * N].push_back(edge(vec[j + i * N][k].to + N, 0));
            }
            vec[j + i * N].push_back(edge(j + i * N + N, 0));
        }
    }
    dijkstra(s);
    printf("%d", d[t + K * N]);
}
void dijkstra(int x)
{
    priority_queue<node> Q;
    Q.push(node(x, 0));
    d[x] = 0;
    while (Q.empty() != 1)
    {
        if (done[Q.top().id] == 1)
        {
            Q.pop();
            continue;
        }
        done[Q.top().id] = 1;
        int u = Q.top().id;
        int dd = Q.top().dis;
        for (int i = 0; i < vec[u].size(); i++)
        {
            if (d[vec[u][i].to] > dd + vec[u][i].w)
            {
                d[vec[u][i].to] = dd + vec[u][i].w;
                Q.push(node(vec[u][i].to, d[vec[u][i].to]));
            }
        }
        Q.pop();
    }
}
2023/10/29 01:36
加载中...