当前位置: 首页 > article >正文

L2-001 紧急救援

L2-001 紧急救援

L2-001 紧急救援 - 团体程序设计天梯赛-练习集

用堆优化的dijskstra,

#include <bits/stdc++.h>

using namespace std;
const int N = 505;
class Dist{
public:
    int u;
    int d;
    Dist(int u_, int d_):u(u_),d(d_){}
    bool operator <(const Dist& other)const{
        return d > other.d;// 小顶堆
    }
};
int pre[N];// 记录当前城市的上一个城市
int s;// 起点
void print(int x){// 输出路径
    if(x == s) {
        cout << s;
        return;
    }
    print(pre[x]);
    cout << " " << x;
}
void solve() {
    int n, m, d; // s为起点 d为终点
    cin >> n >> m >> s >> d;
    int a[n + 1], w[n + 1];//a为每个城市的救援队数  w为能到达某城市的救援队数
    vector<bool> vis(n + 1, false);
    vector<Dist> g[n + 1];
    for (int i = 0; i < n; ++i) {
        cin >> a[i];
    }

    int num[n + 1];// 记录到达某座城市最短路径条数
    w[s] = a[s];
    num[s] = 1;

    for (int i = 0; i < m; ++i) {
        int u, v, w;
        cin >> u >> v >> w;
        g[u].push_back(Dist(v, w));
        g[v].push_back(Dist(u, w));
    }

    priority_queue<Dist> q;
    vector<int> dis(n + 1, INT_MAX);
    dis[s] = 0;
    q.push(Dist(s, 0));
    while (!q.empty()) {
        Dist cur = q.top();
        q.pop();
        int u = cur.u;
        if (vis[u]) continue;
        vis[u] = true;
        for(auto& e : g[u]){
            int v = e.u, d = e.d;
            if(dis[v] > dis[u] + d){
                dis[v] = dis[u] + d;
                num[v] = num[u];
                pre[v] = u;
                w[v] = w[u] + a[v];
                q.push(Dist(v, dis[v]));
            }else if(dis[v] == dis[u] + d){
                if(w[u] + a[v] > w[v]){
                    w[v] = w[u] + a[v];
                    pre[v] = u;
                }
                num[v] += num[u];
            }
        }

    }
    cout << num[d] << " " << w[d] << endl;
    print(d);

}


int main() {
#ifdef ACM_LOCAL
    freopen("data.in", "r", stdin);
//    freopen("data.out", "w", stdout);
#endif
    int T = 1;
//    cin >> T;
    while (T--) {
        solve();
    }

    return 0;
}


http://www.kler.cn/a/572887.html

相关文章:

  • CS144 Lab Checkpoint 0: networking warm up
  • java数据结构_Map和Set_HashMap 底层源码解读_9.5
  • python量化交易——金融数据管理最佳实践——使用qteasy大批量自动拉取金融数据
  • 前端练习项目:html css js 开发AI数字人平台官网前端静态页面
  • 【AIGC】通义万相 2.1 与蓝耘智算:共绘 AIGC 未来绚丽蓝图
  • 设备管理系统功能与.NET+VUE(IVIEW)技术实现
  • 神经网络之CNN文本识别
  • 在 Docker 中,无法直接将外部多个端口映射到容器内部的同一个端口
  • MyBatis-Plus 条件构造器的使用(左匹配查询)
  • Windows零门槛部署DeepSeek大模型:Ollama+7B参数模型本地推理全攻略
  • alpine linux 系统最新版安装及使用教程
  • 【JAVA面试题】Spring、Spring MVC、Spring Boot、Spring Cloud的区别与联系
  • 2025 ubuntu24.04系统安装docker
  • 宠物医疗对接DeepSeek详细方案
  • C++中的 互斥量
  • DeepSeek开源周:五大创新项目详解
  • 自定义wordpress三级导航菜单代码
  • FPGA——4位全加器及3-8译码器的实现
  • 2025东方财富笔试考什么?cata能力测评攻略|答题技巧真题分享
  • STM32 两个单片机之间的通信