$\color{red}WA$了俩点,求助一下。
查看原帖
$\color{red}WA$了俩点,求助一下。
40318
Acfboy楼主2020/7/26 16:42

题目

#include <cstdio>
#include <queue>
#include <cstring>
#include <iostream>
using namespace std;
int vet[400005], lon[400005], head[100005], nxt[400005], num, n, m, s, x, y, z,
    dis[100005], f[10005][15], e, k;
struct node{
    int dis, u;
    bool operator < (node x) const{
        return dis > x.dis;
    }
};
priority_queue <node> heap;
void add(int u, int v, int c){
    num ++;
    vet[num] = v; lon[num] = c;
    nxt[num] = head[u];
    head[u] = num;
}
void Dijkstra(int s){
    memset(dis, 0x7f, sizeof(dis));
    dis[s] = 0;
    f[s][0] = 0;
    node now; 
    now.u = s; now.dis = 0;
    heap.push(now);
    while(!heap.empty()){
        now = heap.top();
        heap.pop();
        int u = now.u, d = now.dis;
        if(d != dis[u]) continue;
        for(int i = head[u]; i; i = nxt[i]){
            int v = vet[i];
            if(dis[u] + lon[i] < dis[v]){
                dis[v] = dis[u] + lon[i];
                now.u = v; now.dis = dis[v];
                f[v][0] = min(f[v][0], dis[v]);
                for(int j = 1; j <= k; j++)
                    f[v][j] = min(f[v][j], min(f[u][j] + lon[i], f[u][j-1]));
                heap.push(now);
            }
        }
    }
}
int main(){
    scanf("%d%d%d", &n, &m, &k);
    scanf("%d%d", &s, &e);  
    for(int i = 1; i <= m; i++){
        scanf("%d%d%d", &x, &y, &z);
        add(x, y, z);
        add(y, x, z);
    }
    memset(f, 0x7f, sizeof(f));
    Dijkstra(s);
    printf("%d", f[e][k]);
    return 0;
}
2020/7/26 16:42
加载中...