L2-001. 紧急救援

时间限制
200 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
陈越

作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上。当其他城市有紧急求助电话给你的时候,你的任务是带领你的救援队尽快赶往事发地,同时,一路上召集尽可能多的救援队。

输入格式:

输入第一行给出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

——————————————————————————————————

题目的意思是求从S到D的最短路,并输出最短路的条数和点权和最大的路

在Dijkstra时开几个数组更新即可,由于求条数,更新时等于的情况特殊处理

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <queue>
#include <stack>
#include <string>
#include <set>
#include<vector>
#include <map>
using namespace std;
#define inf 0x3f3f3f3f
int edge[505][505];
int vis[505],cnt[505],dis[505],sum[505],pre[505];
int a[505];
struct node{
int id,val;
bool friend operator<(node a,node b)
{
return a.val>b.val;
}
}; int n,m; void djstl(int o)
{
memset(dis,inf,sizeof dis);
memset(vis,0,sizeof vis);
memset(sum,0,sizeof sum);
memset(cnt,0,sizeof cnt);
node f,d;
f.id=o;
f.val=0;
priority_queue<node>q;
q.push(f);
vis[o]=1;
dis[o]=0;
sum[o]=1;
cnt[o]=a[o];
while(!q.empty())
{
f=q.top();
q.pop();
vis[f.id]=1; for(int i=0;i<n;i++)
{
if(!vis[i]&&f.val+edge[f.id][i]<dis[i])
{
dis[i]=f.val+edge[f.id][i];
cnt[i]=cnt[f.id]+a[i];
pre[i]=f.id;
sum[i]=sum[f.id];
d.id=i;
d.val=dis[i];
q.push(d);
}
else if(!vis[i]&&f.val+edge[f.id][i]==dis[i])
{
if(cnt[i]<cnt[f.id]+a[i])
{
cnt[i]=cnt[f.id]+a[i];
pre[i]=f.id;
}
sum[i]+=sum[f.id]; }
}
}
} int main()
{
int st,ed,u,v,w;
while(~scanf("%d%d%d%d",&n,&m,&st,&ed))
{
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
memset(edge,inf,sizeof edge);
for(int i=0;i<m;i++)
{
scanf("%d%d%d",&u,&v,&w);
if(w<edge[u][v])
{
edge[u][v]=edge[v][u]=w;
}
}
memset(pre,-1,sizeof pre);
djstl(st);
printf("%d %d\n",sum[ed],cnt[ed]);
stack<int>s;
s.push(ed);
while(pre[ed]!=-1)
{
s.push(pre[ed]);
ed=pre[ed];
}
int q=0;
while(!s.empty())
{
if(q++)
printf(" ");
printf("%d",s.top());
s.pop();
}
printf("\n");
}
return 0;
}

团体程序设计天梯赛L2-001 紧急救援 2017-03-22 17:25 93人阅读 评论(0) 收藏的更多相关文章

  1. 团体程序设计天梯赛L1-020 帅到没朋友 2017-03-22 17:46 72人阅读 评论(0) 收藏

    L1-020. 帅到没朋友 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 当芸芸众生忙着在朋友圈中发照片的时候,总有一些人因为 ...

  2. 团体程序设计天梯赛L1-017 到底有多二 2017-03-22 17:31 155人阅读 评论(0) 收藏

    L1-017. 到底有多二 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 一个整数"犯二的程度"定义为该数 ...

  3. 第十二届浙江省大学生程序设计大赛-Ace of Aces 分类: 比赛 2015-06-26 14:25 12人阅读 评论(0) 收藏

    Ace of Aces Time Limit: 2 Seconds Memory Limit: 65536 KB There is a mysterious organization called T ...

  4. 2012年"浪潮杯"山东省第三届ACM大学生程序设计竞赛--n a^o7 ! 分类: 比赛 2015-06-09 17:16 14人阅读 评论(0) 收藏

    n a^o7 ! Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 All brave and intelligent fighte ...

  5. 团体程序设计天梯赛L1-019 谁先倒 2017-03-22 17:35 33人阅读 评论(0) 收藏

    L1-019. 谁先倒 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 划拳是古老中国酒文化的一个有趣的组成部分.酒桌上两人划拳 ...

  6. 团体程序设计天梯赛L1-018 大笨钟 2017-03-22 17:29 79人阅读 评论(0) 收藏

    L1-018. 大笨钟 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 微博上有个自称"大笨钟V"的家伙,每 ...

  7. 团体程序设计天梯赛L1-024 后天 2017-03-22 17:59 68人阅读 评论(0) 收藏

    L1-024. 后天 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 如果今天是星期三,后天就是星期五:如果今天是星期六,后天就 ...

  8. 团体程序设计天梯赛L1-023 输出GPLT 2017-03-22 17:56 39人阅读 评论(0) 收藏

    L1-023. 输出GPLT 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定一个长度不超过10000的.仅由英文字母构成的 ...

  9. 团体程序设计天梯赛L1-022 奇偶分家 2017-03-22 17:48 81人阅读 评论(0) 收藏

    L1-022. 奇偶分家 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定N个正整数,请统计奇数和偶数各有多少个? 输入格式 ...

随机推荐

  1. MySQL 数据库查询练习

    -- ---------------------------- -- mysql练习sql脚本 -- ---------------------------- create database db10 ...

  2. 把MacBook里的电影导入到iPad

    主要是用iTunes -> 文件 -> 添加到资料库,然后选择影片 -> 同步 -> 应用.在iPad上点开视频APP即可. 怎样才能把mac里的电影放到ipad里_百度知道 ...

  3. 031:Cetus sharding

    目录 一.主机环境 二.搭建环境 1.准备环境 三.Cetus安装 1.下载包和安装依赖包 2.Cetus安装 1.安装说明 2.安装实施 四.Cetus配置 1.创建和修改配置文件 2.启动cetu ...

  4. 关于jQuery的$.proxy()应用.

    今天在看<<锋利的jQuery>>时看到了proxy()的使用,感觉很模糊,就到处找资料. jQuery的源码也没看明白. 不过总算明白了proxy的用法了; <inpu ...

  5. Struts 2 常用技术

    目录  Struts 2 常用技术  1. 常用类和接口  1.1 getter 和 setter 方法  1.2 Action 接口  1.3 ActionSupport 类  1.4 通过 Act ...

  6. 在MetaFile里放图片

    procedure TForm1.Button1Click(Sender: TObject); var m : TmetaFile; mc : TmetaFileCanvas; b : tbitmap ...

  7. jsp脚本语法

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...

  8. acoj-1735 输油管道 【中位数】

    题目链接:http://acdream.info/problem?pid=1735 输油管道 Time Limit: 2000/1000MS (Java/Others) Memory Limit: 2 ...

  9. ETL数据仓库

    http://blog.csdn.net/leicool_518/article/category/3058299 http://bbs.csdn.net/topics/390349305

  10. oracle 基本函数小例子--查询身高段分数段

    select * from student order by id drop table student select * from oracletest create table student( ...