迫切施救(最短路 + 保存路径)5588葡京线路

title: L2-001. 紧急抢救

《三块广告牌》算是2019年口碑爆棚的一匹黑马,不声不响已经在金球奖、威梅里达电影节、大英帝国电影大学奖等斩获从剧本女主导演到拍照剪辑等五个奖项。作为平时观众,不提演技视觉,仅故事我就值得一看。

分析

与科普的单起点最短路径不同,这题两点之间的门路不但有权值,并且每个点还有权值(能集合军队的数据),同时还要求输出最短路径的条数(最短路径可能有多条),以及出口求得最短路径的场地下输出点权值之和最大的那一条途径,(从原点到终点有好多条最短路径,从中挑选一条能集合军队数量最多的那一条路子)。

急需保留的音信比较多,①最短路径的条数②路径③点权值。

5588葡京线路 1

如图:对于急需保留路径数目标最短路,假设dis[]的先导化为各样点到起源的偏离的话,(起点是0
终点是3)那么3那一个极限只会被松弛五遍(尽管从0到3距离 与 从0到1再到3
的离开相等,可是透过第二条线路所能召集的人马的数码多余0—->3,所以也要进行座谈),那么对于3来说,他的路子只有一条。

就此要把dis[]最先化为地方的表所示,这样3以此点就会被松弛三回,每松弛五次,他的门道数目就会扩展。

#include <iostream>
#include<algorithm>
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<set>
#include<vector>
#include<queue>
#include<map>
using namespace std;
const int inf = 0x3f3f3f3f;
int road[501][501];
//标记数组
int vest[501];
//path[i]i的前驱节点  total[i]走到i点时,所能召集最多的军队数目,  pathNum[i]能走到i点的最短路径数目
int dis[501], path[501], total[505], pathNum[505];
//每个点的军队的数目
int value[505];
int n;

void Dij(int a)
{
    for (int i = 0; i < n; i++ )
    {
        vest[i] = 0;
        dis[i] = inf;//注意和  dis[i]=road[a][i]  区分
        total[i] = 0;
        pathNum[i] = 0;
    }
    dis[a] = 0;
    vest[a] = 1;
    pathNum[a] = 1;
    path[a] = -1;//源点的前驱节点为-1
    total[a] = value[a];//能召集的军队的数目
    int counter = 1;
    int op = a;
    while (counter <= n - 1)
    {
        int min1 = inf;
        for (int i = 0; i < n; i++)
        {
            if (vest[i] == 0 && dis[i] < min1)
            {
                min1 = dis[i];
                op = i;
            }
        }
        vest[op] = 1;
        counter++;
        for (int i = 0; i < n; i++)
        {
            if (vest[i] == 0)
            {
                if (dis[i] > dis[op] + road[op][i])//能通过op松弛i点
                {
                    path[i] = op;//通过op到达的i点
                    pathNum[i] = pathNum[op];
                    total[i] = total[op] + value[i];
                    dis[i] = dis[op] + road[op][i];

                }
                else   if (dis[i] == dis[op] + road[op][i])//通过op松弛后,和原来的距离一样,说明有                       一条新的最短路径,此时就要讨论是选择这一条路径(可能召集的军队数目会增加)
                {
                    pathNum[i] += pathNum[op];//到达i点的路径增加
                    if (total[i] < total[op] + value[i])//能召集的军队数目会增加
                    {
                        total[i] = total[op] + value[i];
                        path[i] = op;//那就改变他的前驱节点
                    }
                }
            }
        }
    }
}
void printpath(int s)
{

    if (path[s] == -1)
    {
        printf("%d", s);
        return ;
    }
    printpath(path[s]);
    printf(" %d", s);
    return ;
}

int main()
{
    int roadCount = 0;
    int s, d;
    scanf("%d%d%d%d", &n, &roadCount, &s, &d);
    for (int i = 0; i < n; i++)
        cin >> value[i];

    for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
            if (i == j)road[i][j] = 0;
            else road[i][j] = road[j][i] = inf;
    for (int i = 0; i < roadCount; i++)
    {
        int a, b, c;
        cin >> a >> b >> c;
        road[a][b] = road[b][a] = min(road[b][a], c);
    }
    Dij(s);
    printf("%d %d\n", pathNum[d], total[d]);
    printpath(d);

    return 0;
}
/*


4 5 0 3
20 30 40 10
0 1 1
1 3 2
0 3 3
0 2 2
2 3 2


*/

除了他们,还有女主的前夫,死了孙女还泡19岁妞,一个扰乱的巡捕,此前就因歧视黑人臭名远扬,警长死后竟然冲到广告集团用枪托狠狠揍了业务员,把她从二楼扔下楼……这么些人选,随着电影逐渐显现她们的多面,他们的泥沼,冷酷、极端和厌恶,善良和脆弱。我们不可以再用人渣、败类、无能这个标签粗暴地贴在她们身上,而是有带入感,他们就像身边的无名小卒,陷在不同的人生困境中,有的用一枪干净利落解决,有的用愤怒对抗。这一个历程中外界的震慑其实远非那么大,所以电影也未曾着意创造外部顶牛,有也进行了衰弱。比如有人在警长死后朝女主车上扔汽水瓶,被她干净利落踢下档解决,还有烧警察局这种大事依然也不止了之,一方面惊叹小镇民风纯朴,另一方面应该也是刻意为之,让这多少个沉重的事披上温暖的门面,也尚无歪曲人生困境的关键。

tags: [acm,Dijkstra,天梯赛]

题目链接

5588葡京线路,作为一个城市的应急救援阵容的集团主,你有一张特殊的举国地图。在地图上展现有四个分散的城池和局部连续城市的急速道路。每个城市的救援队数量和每一条连接四个都市的急速道路长度都标在地图上。当其他城市有紧急求助电话给您的时候,你的天职是指点你的救援队尽快赶往事发地,同时,一路上召集尽可能多的救援队。

输入格式:

输入第一行提交4个正整数N、M、S、D,其中N(2<=N<=500)是都市的个数,顺便假如城市的号码为0~(N-1);M是急迅道路的条数;S是出发地的都市编号;D是目标地的城池编号。第二行给出N个正整数,其中第i个数是第i个城市的救援队的多寡,数字间以空格分隔。随后的M行中,每行给出一条神速道路的音讯,分别是:城市1、城市2、迅速道路的长度,中间用空格分开,数字均为整数且不超过500。输入保证救援可行且最优解唯一。

出口格式:

第一行输出不同的最短路径的条数和力所能及召集的最多的救援队数量。第二行输出从S到D的途径中通过的城市编号。数字间以空格分隔,输出前后无法有剩余空格。

输入样例:

4 5 0 3
20 30 40 10
0 1 1
1 3 2
0 3 3
0 2 2
2 3 2

输出样例:

2 60
0 1 3

视频从一位愤怒绝望的姑姑租下小镇一条人迹罕至公路两旁丢弃的三块广告牌起首,分别写着:强奸致死、凶手为何没被抓到、威洛比警长?她的闺女一年前在广告牌的职位被人强奸后烧死,案件直接没破。


而被点名无作为的威洛比警长,不算昏庸无能甚至跟一般电影里大面积的警官形象不相同。这是个得了胆汁返流性胃炎只可以活一个多月的警长,在小镇因为敬业和善有好人缘。影片尚未着意煽情悲情或创立抵触,当我们都为她的饱受打抱不平时,他只是像老朋友一样和女主聊天,无奈解释多少案件查到终极就是从未头脑。这些好性子的人相相比较亲人很和气,但也很坚强,带着太太女儿野餐后,他开枪自杀了。不是迫于压力,而是怕癌症最终会把一家人拖入绝望,自杀前还细心地套着头套,下边写着,不要拿开,打电话。甚至对女主也很温和细致,怕她迫于压力或内疚,写了封信表明,还很有趣地留了个小彩蛋,出钱给广告牌又续了一个月的费用……

前线有剧透

但影片往前推进,大家了解绝望悲愤怒不顾一切与派出所对抗的小姨,在外孙女出事前刚吵了一架,她不让孙女开车出去玩,外孙女负气离开,说自家走着去,被强奸好了!大妈毫不在意。没悟出一语成谶。和女儿、前夫的三遍争吵中,也能收看他不算好大妈,载着子女酒醉驾驶。女儿出事前央求小叔收留,因为受不了了。白天怼警察怼路人愤怒当盔甲的她,傍晚坐在外孙女床上,回忆事发前的吵架,苍老疲惫的脸满是可悲。

这像是一个警官机构官僚无能造成痛失爱女的小姨绝望无法释怀,批判现实的影片,坏人是警察,看上去也确实是,广告牌立起来后她们不是加速破案,而是找广告商的茬,找女主好友的茬,要不就是在办公无所事事,处理广告牌投诉。母亲令人不忍,无论是卖掉拖拉机才能付的一个月广告费,儿子的不亮堂或是自己没辙释怀前夫已经和19岁女孩约会了。只要刻意勾画警察的经营不善姑姑的绝望,成立争持,那么人们很容易被诱惑心境,就像许多公号在做的事一样。

5588葡京线路 2

总而言之,这真是一部好电影!

5588葡京线路 3

被警长戳中泪点

成套故事多条线路穿插,丰盛而不散乱,结尾居然是恼怒的亲娘和纷扰的被辞警察用一个很牵强的说辞结伴上路,看到这然后就停止出字幕完全蒙圈,回过头想想也是意味深长。