ans输出全是0
查看原帖
ans输出全是0
867573
EEqualIPie楼主2024/10/23 17:16

盯了一个小时也没发现问题,在ans取min的时候就全是0了

#include<bits/stdc++.h>
using namespace std;
typedef pair<int, int> pii;
const int N = 2e6+10;
const int inf = 1e9;
int n, m, k, s, t, ans = inf;

struct edge{
    int to, nxt, w;
} e[N<<1];
int head[N], cnt, vis[N], dis[N];

inline void add(int u, int v, int w){
    cnt++;
    e[cnt].to = v;
    e[cnt].nxt = head[u];
    e[cnt].w = w;
    head[u] = cnt;
}

struct node{
    int dis, pos;
    bool operator <(const node&a)const{
        return a.dis < dis;
    }
};
priority_queue<node> q;
inline void djstra(int s){
    memset(dis, inf, sizeof(dis));
    q.push((node){0, s});
    dis[s] = 0;
    while(!q.empty()){
        int u = q.top().pos;
        q.pop();
        if(vis[u]) continue;
        vis[u] = 1;
        for(int i=head[u]; i; i=e[i].nxt){
            int to = e[i].to;
            if(dis[to] > dis[u] + e[i].w){
                dis[to] = dis[u] + e[i].w;
                if(!vis[to]) q.push((node){dis[to], to});
            }
        }
    }
}

int main(){
    scanf("%d%d%d%d%d", &n, &m, &k, &s, &t);
    ++s, ++t;
    memset(vis, 0, sizeof(vis));
    for(int u, v, c, i=1; i<=m; i++){
        scanf("%d%d%d", &u, &v, &c);
        ++u, ++v;
        add(u, v, c);
        add(v, u, c);
        for(int j=1; j<=k; j++){
            add(u+(j-1)*n, v+j*n, 0);
            add(v+(j-1)*n, u+j*n, 0);
            add(u+j*n, v+j*n, c);
            add(v+j*n, u+j*n, c);
        }
    }
    djstra(s);
    for(int i=0; i<=k; i++) ans = min(ans, dis[t+i*n]);
    printf("%d", ans);
    return 0;
}
2024/10/23 17:16
加载中...