首页 > 其他分享 >1003 Emergency

1003 Emergency

时间:2022-11-21 22:01:38浏览次数:49  
标签:vers ver rescue Emergency arcs int num 1003

 

 

#include <iostream>
#include <vector>

using namespace std;

#define MaxInt 32767
#define MVNum 500

typedef int ver_type;
typedef int arc_type;
typedef struct {
    ver_type vers[MVNum];
    arc_type arcs[MVNum][MVNum];
    int ver_num, arc_num;
}am_gragh;

typedef struct {
    am_gragh g;
    int c1, c2;
}rescue_task;

void init_am_gragh(am_gragh &g, int ver_num, int arc_num)
{
    g.ver_num = ver_num;
    g.arc_num = arc_num;
    for (int i = 0; i < g.ver_num; ++i)
        for (int j = 0; j < g.ver_num; ++j) {
            g.arcs[i][j] = MaxInt;
            g.arcs[j][i] = MaxInt;
        }
}
void shortest_path_dij(am_gragh& g, int v0, vector<int>& shortesr_num, vector<int>& rescue_num)
{
    int n = g.ver_num;
    vector<bool> s(n);
    vector<int> d(n);
    for (int i = 0; i < n; ++i) {
        s[i] = false;
        d[i] = g.arcs[v0][i];
        shortesr_num[i] = 1;
        rescue_num[i] = g.vers[v0] + g.vers[i];
    }
    s[v0] = true;
    d[v0] = 0;
    rescue_num[v0] = g.vers[v0];
    for (int i = 1; i < n; ++i) {
        int min = MaxInt;
        int k = v0;
        for (int w = 0; w < n; ++w) {
            if ((!s[w]) && (min > d[w])) {
                k = w;
                min = d[w];
            }
        }
        s[k] = true;
        for (int w = 0; w < n; ++w) {
            if(!s[w]) {
                if (d[k] + g.arcs[k][w] < d[w]) {
                    d[w] = d[k] + g.arcs[k][w];
                    rescue_num[w] = rescue_num[k] + g.vers[w];
                    shortesr_num[w] = shortesr_num[k];
                }
                else if (d[k] + g.arcs[k][w] == d[w]) {
                    if((rescue_num[k] + g.vers[w]) > rescue_num[w])
                        rescue_num[w] = rescue_num[k] + g.vers[w];
                    shortesr_num[w] += shortesr_num[k];
                }
            }
        }
    }
}
int main(void)
{
    rescue_task rescue;
    int n,m;
    cin >> n >> m;
    cin >> rescue.c1 >> rescue.c2;
    init_am_gragh(rescue.g, n, m);
    for (int i = 0; i < n; ++i)
        cin >> rescue.g.vers[i];

    for (int k = 0; k < m; ++k) {
        int i, j;
        cin >> i >> j;
        cin >> rescue.g.arcs[i][j];
        rescue.g.arcs[j][i] = rescue.g.arcs[i][j];
    }

    vector<int> shortesr_num(n);
    vector<int> rescue_num(n);
    shortest_path_dij(rescue.g, rescue.c1, shortesr_num, rescue_num);
    cout << shortesr_num[rescue.c2] << ' ' << rescue_num[rescue.c2] << endl;
    return 0;
}

/*
 *输入:
 第一行:4个正整数(<500):
     第一个N:城市数量(序号从0开始)
     第二个M:道路数量
     第三个C1:你所在城市
     第四个C2:需要救援的城市
 第二行:N个数:表示第i个城市的救援队的数量
 剩余的M行:每一行3个数:第一第二个数为城市序号,第三个数为这个两个城市之间的距离

 输出:
 一行;两个数:C1到C2的最短距离,汇聚的救援队的数量
 */
/*
例:
输入
5 6 0 2
1 2 1 5 3
0 1 1
0 2 2
0 3 1
1 2 1
2 4 1
3 4 1
输出
2 4
*/

 

标签:vers,ver,rescue,Emergency,arcs,int,num,1003
From: https://www.cnblogs.com/hellototoro/p/16913514.html

相关文章

  • 紧急模式(emergency mode)问题处理方法
    问题现象Linux系统启动时进入紧急模式,提示:Welcometoemergencymode,如图1所示,并提示输入root密码进入维护。图1 紧急模式根因分析紧急模式提供尽可能最小的环境,即......
  • 611003 CAD CAD基础操作
    本节课讲解3CAD基础操作。1.点击上面的小三角,选择【显示菜单栏】,将现有的工具命令栏进行删除。2.在工具栏空白处右键,选择【关闭】,将操作空间变大。3.【工具】-【工......
  • 51Nod-1003-阶乘后面0的数量
    这道题网上已经有很多博客了,但是都没讲清楚,想明白后遂做此记录。阶乘后面0的数量,乘起来是以0结尾,只能是​​2x5​​​,说0结尾的走开。而2的数量肯定比5多不,所以只要计算5......
  • laravel9 dcatadmin laravel-admin laravel.EMERGENCY: Unable to create configured
    问题laravel9使用dcatadmin或者laravel-admin出现问题laravel.EMERGENCY:Unabletocreateconfiguredlogger.Usingemergencylogger解决方法//文件/vendor/dca......
  • 1003 我要通过!(JAVA)
    “答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于PAT的“答案正确”大派送——只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”......
  • 随身WIFI刷机记录 UF1003
    设备说明拿到手的设备是UF1003的设备,入手价格23元。视频会同步到BIlibili,感谢大家的支持,点个三连吧,谢谢。刷机过程拆机,按住主板上的按钮,连接电脑USB接口,发现可以使用9......
  • Ipyton使用笔记[1003]
    第一次使用:字符串操作   In[1]:lst=[11,12,13,7,1,3,2,2,5,6,10,7]In[2]:lstOut[2]:[11,12,13,7,1,3,2,2,5,6,10,7]In[3]:lst1=[11,12,13,......
  • 总结1003
    ##用户交互交互的本质就是输入、输出关键字inputprint或者是output##格式化输出关键字占位符%s%d特殊方法\n\a等不需要使特殊符号起作用是前面加r##算术......
  • kaldi入门-编译安装 https://www.cnblogs.com/parser/p/10036579.html
    kaldi入门-编译安装 1、下载代码gitclone https://github.com/kaldi-asr/...cdkaldi2、编译toolscdtools./extras/check_dependences.shmake-j43、编译cdsrc......
  • 1003 我要通过!
    “答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于PAT的“答案正确”大派送——只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”......