首页 > 其他分享 >L2-001 紧急救援

L2-001 紧急救援

时间:2023-03-16 20:35:30浏览次数:31  
标签:tmp pre dist 救援 int value 001 L2 510

#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
int g[510][510];
int num[510];
int dist[510];
int st[510];
//st确定的顺序不一定是最短路径的顺序,二者没关系
int value[510];//到每个点最短路救援队伍的数量
int cnt[510];//到每个点最短路的数目
int pre[510];//父节点
int main() {
    int n, m, s, d;
    cin >> n >> m >> s >> d;
    memset(dist, 0x3f, sizeof dist);
    memset(g, 0x3f, sizeof g);
    memset(pre, -1, sizeof pre);
    for (int i = 0; i < n; i++) {
        cin >> num[i];
    }
    for (int i = 0; i < m; i++) {
        int c1, c2, w;
        cin >> c1 >> c2 >> w;
        g[c1][c2] = w;
        g[c2][c1] = w;

    }

    dist[s] = 0;
    int t = -1;
    value[s] = num[s];
    cnt[s] = 1;
    //     st[s] = 1;

    for (int j = 0; j < n; j++) {
        int tmp = 0;
        t = -1;
        for (int i = 0; i < n; i++) {
            if (!st[i] && (t == -1 || dist[i] < t)) {
                t = dist[i];
                tmp = i;
            }
        }

        st[tmp] = 1;
        for (int i = 0; i < n; i++) {
            if (dist[i] > dist[tmp] + g[tmp][i]) {//如果有更短路径
                dist[i] = dist[tmp] + g[tmp][i];
                value[i] = value[tmp] + num[i];
                pre[i] = tmp;
                cnt[i] = cnt[tmp];
            }

            else if ((dist[i] == dist[tmp] + g[tmp][i]) && (tmp != i)) {//如果与最短路长度相等
                cnt[i] += cnt[tmp];
                if (value[i] < value[tmp] + num[i]) {
                    value[i] = value[tmp] + num[i];
                    pre[i] = tmp;
                }
            }

        }
    }

    cout << cnt[d] << ' ' << value[d] << endl;
    vector<int> path;
    path.push_back(d);
    while (pre[d] != -1) {
        path.push_back(pre[d]);
        d = pre[d];
    }
    reverse(path.begin(), path.end());
    for (auto iter = path.begin(); iter != path.end() - 1; iter++)
        cout << *iter << ' ';
    cout << path.back();

}

/*本题出现的问题
    1.数组初始化,g[][]起初没有初始化,应该初始化两点距离距离为正无穷
    2.无向图要存两个方向的边
    3.cnt[i] += cnt[tmp]; 思路要明晰,不是加一是把到tmp的最短路数都加上
    4.if elseif 使用时一定注意第二个用if 还是 else if
    5.总体逻辑要理清,模板题
*/

 

标签:tmp,pre,dist,救援,int,value,001,L2,510
From: https://www.cnblogs.com/youngbrooke/p/17224027.html

相关文章

  • 重磅:RHCA架构师新班要开课啦:《利用红帽 Ceph 存储的云存储(CL260)》
    培训安排线下+线上可同时学习2023年3月25日开始—4月15日结束注:●以上为课程时间计划课程介绍利用红帽Ceph存储的云存储(CL260)课程适合存储管理员以及在生产数据中心环境下......
  • WSL2 设置代理
    添加到~/.bashrcexportHOSTIP=$(cat/etc/resolv.conf|grep"nameserver"|cut-f2-d"")exporthttp_proxy="http://$HOSTIP:7890"exporthttps_proxy="http:/......
  • BUU pwn jarvisoj_level2_x64 64位函数调用栈
    jarvisoj_level2_x64文件是64位ELF文件IDA查看函数vuln,明显栈溢出查看字符串,发现存在'/bin/sh',地址为0x600A90查看函数,发现存在system函数,地址为0x4004c0。注意不能......
  • 0006 ALGO1001-跳马
    试题算法训练跳马使用广度优先搜索,首次抵达结束位置即为结果,或者走不到对应的点位,则输出-1;解题步骤数据输入数据初始化(棋盘初始化为无穷大,表示无法跳到此处)将开......
  • WSL2使用Git拉取私有库与go build
    WSL2感觉就是空壳,啥都没有,啥都要自己下...这个需求的主要原因是因为想在WSL2进入Windows下的Goproject目录运行gobuild,拿到二进制编译文件之后上传到线上服务器进行部......
  • Google earth engine——全球森林碳通量(2001-2021)数据集可视化含代码
    全球森林碳通量(2001-2021)森林碳净通量是指2001年至2021年期间森林与大气之间的碳净交换量,计算方法是模型期间森林排放的碳与森林移除(或封存)的碳之间的平衡(兆克CO2排放量/公......
  • L298N 5V使能跳帽使用详解
      5V使能引脚,即图中5VEnable引脚。该引脚与5VPower引脚息息相关,因此首先需要知道5VPower引脚的功能。L298N的5VPower引脚目的是给L298芯片供电(注意:不是给电机供......
  • linux(wsl2 ubuntu) mariadb重置密码
    可用于不知道默认密码或忘记密码等场景操作环境是WSL2版本ubuntu22停止MariaDB服务 sudoservicemariadbstop2.在不加载授权表的情况下启动MariaDB服务......
  • 使用js的html2canvas截图div并下载
    暂未完赛,请继续加油吧-测试截图```functiongetScreenShot(){html2canvas(document.querySelector("#canvas")).then(canvas=>{//docume......
  • ISO9001认证怎么做?ISO9001质量管理体系认证知识科普
    ISO9001认证怎么做?ISO9001质量管理体系认证知识科普ISO体系简介:国际标准化组织(ISO)于1979年成立了质量管理和质量保证技术委员会(TC176),负责制定质量管理和质量保证标准。ISO......