逃跑(escape)
逃跑(escape)
时间限制: 3 Sec 内存限制: 128 MB
题目描述
输入
输出
样例输入
样例输出

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<queue>
#include<stack>
#include<algorithm>
#include<ctime>
#include<vector>
using namespace std;
int n,m,a,src,des;
struct node
{
int next,to;
long long dis,dis2;
}edge[];
int head[],size=;
int b[];//蝙蝠所在点
long long v1[];//各点到终点
long long v2[];//二小姐到各点
long long v3[];
void putin(int from,int to,long long dis,long long dis2)
{
size++;
edge[size].next=head[from];
edge[size].to=to;
edge[size].dis=dis;
edge[size].dis2=dis2;
head[from]=size;
}
void in(int from,int to,long long dis,long long dis2)
{
putin(from,to,dis,dis2);
putin(to,from,dis,dis2);
}
void bfs1()
{
memset(v1,/,sizeof(v1));
int front=,tail=,i,j;
int p[],vis[]={};
p[tail++]=des;
v1[des]=;
vis[des]=;
while(front!=tail)
{
int x=p[front++];
front%=;
vis[x]=;
for(i=head[x];i!=-;i=edge[i].next)
{
int y=edge[i].to;
if(v1[y]>v1[x]+edge[i].dis)
{
v1[y]=v1[x]+edge[i].dis;
if(!vis[y])
{
vis[y]=;
p[tail++]=y;
tail%=;
}
}
}
}
}
void bfs2()
{
memset(v2,/,sizeof(v2));
int front=,tail=,i,j;
int p[],vis[]={};
p[tail++]=src;
v2[src]=;
vis[src]=;
while(front!=tail)
{
int x=p[front++];
front%=;
vis[x]=;
for(i=head[x];i!=-;i=edge[i].next)
{
int y=edge[i].to;
if(v2[y]>v2[x]+edge[i].dis2)
{
v2[y]=v2[x]+edge[i].dis2;
if(!vis[y])
{
vis[y]=;
p[tail++]=y;
tail%=;
}
}
}
}
}
void bfs3()
{
memset(v3,,sizeof(v3));
int front=,tail=,i,j;
int p[],vis[]={};
for(i=;i<=a;i++)
{
p[tail++]=b[i];
v3[b[i]]=v1[b[i]];
vis[b[i]]=;
}
while(front!=tail)
{
int x=p[front++];
front%=;
vis[x]=;
for(i=head[x];i!=-;i=edge[i].next)
{
int y=edge[i].to;
if(v3[y]<v3[x]-edge[i].dis)
{
v3[y]=v3[x]-edge[i].dis;
if(!vis[y])
{
vis[y]=;
p[tail++]=y;
tail%=;
}
}
}
}
}
long long ans,ans1;
int main()
{
memset(head,-,sizeof(head));
int i,j;
scanf("%d%d%d%d%d",&n,&m,&a,&src,&des);
for(i=;i<=a;i++)
scanf("%d",&b[i]);
for(i=;i<=m;i++)
{
int from,to;long long dis,dis2;
scanf("%d%d%lld%lld",&from,&to,&dis,&dis2);
in(from,to,dis,dis2);
}
bfs1();bfs2();bfs3();
ans+=v2[des];
for(i=;i<=a;i++)
ans+=v1[b[i]];
ans1=ans;
for(i=;i<=n;i++)
{
ans1=min(ans1,ans-v2[des]+v2[i]+v1[i]-v3[i]);
}
cout<<ans1;
return ;
}
逃跑(escape)的更多相关文章
- 【BZOJ-1340】Escape逃跑问题 最小割
1340: [Baltic2007]Escape逃跑问题 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 264 Solved: 121[Submit] ...
- BZOJ 1340: [Baltic2007]Escape逃跑问题
1340: [Baltic2007]Escape逃跑问题 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 285 Solved: 133[Submit] ...
- HDU 3533 Escape(大逃亡)
HDU 3533 Escape(大逃亡) /K (Java/Others) Problem Description - 题目描述 The students of the HEU are maneu ...
- 【HDU - 3533】Escape(bfs)
Escape Descriptions: 一个人从(0,0)跑到(n,m),只有k点能量,一秒消耗一点,在图中有k个炮塔,给出炮塔的射击方向c,射击间隔t,子弹速度v,坐标x,y问这个人能不能安全到 ...
- ACM: Gym 101047E Escape from Ayutthaya - BFS
Gym 101047E Escape from Ayutthaya Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I6 ...
- 简单明了区分escape、encodeURI和encodeURIComponent
一.前言 讲这3个方法区别的文章太多了,但是大部分写的都很绕.本文试图从实践角度去讲这3个方法. 二.escape和它们不是同一类 简单来说,escape是对字符串(string)进行编码(而另外两种 ...
- c#模拟js escape方法
public static string Escape(string s) { StringBuilder sb = new StringBuilder(); byte[] ba = System.T ...
- LYDSY热身赛 escape
Description 给出数字N(1<=N<=10000),X(1<=x<=1000),Y(1<=Y<=1000),代表有N个敌人分布一个X行Y列的矩阵上矩形的行 ...
- javascript escape()函数和unescape()函数
javascript escape()函数和unescape()函数 escape() 函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串. 语法: escape(string) stri ...
随机推荐
- matlab笔记(1) 元胞结构cell2mat和num2cell
摘自于:https://zhidao.baidu.com/question/1987862234171281467.html https://www.zybang.com/question/dcb09 ...
- [大数据]-Elasticsearch5.3.1+Kibana5.3.1从单机到分布式的安装与使用<2>
前言:上篇[大数据]-Elasticsearch5.3.1+Kibana5.3.1从单机到分布式的安装与使用<1>中介绍了ES ,Kibana的单机到分布式的安装,这里主要是介绍Elast ...
- 浅析SQL Server数据库中的伪列以及伪列的含义
SQL Server中的伪列 下午看QQ群有人在讨论(非聚集)索引的存储,说,对于聚集索引表,非聚集索引存储的是索引键值+聚集索引键值:对于非聚集索引表,索引存储的是索引键值+RowId,这应该是一个 ...
- poj3067 Japan 树状数组求逆序对
题目链接:http://poj.org/problem?id=3067 题目就是让我们求连线后交点的个数 很容易想到将左端点从小到大排序,如果左端点相同则右端点从小到大排序 那么答案即为逆序对的个数 ...
- 非阻塞式线程安全列表-ConcurrentLinkedDeque
一.ConcurrentLinkedDeque public class ConcurrentLinkedDeque<E> extends AbstractCollection<E& ...
- ANSJ中文分词使用方法
一.前言 之前做solr索引的时候就使用了ANSJ进行中文分词,用着挺好,然而当时没有写博客记录的习惯.最近又尝试了好几种JAVA下的中文分词库,个人感觉还是ANSJ好用,在这里简单总结之. 二.什么 ...
- Arduino UNO +ESP8266采集数据上传到贝壳网
集成电路设计大赛赛程将至,我现在还是毫无头绪,然后又报了一个互联网+,比赛报了,东西就必须出来,时间很紧的情况下,所以选择了开源的arduino的进行完成.从开始接触Arduino到完成工程,前前后后 ...
- 配置nginx脚本开机自启动
vi /etc/init.d/nginx 插入以下内容,修改红色字体自己安装路径 #!/bin/bash## chkconfig: - 85 15# description: Nginx is a W ...
- Linux 通过端口转发来访问内网服务
Rinetd是为在一个Unix和Linux操作系统中为重定向传输控制协议(TCP)连接的一个工具,系统内部服务受系统网服限制外部无法访问,需要通过rinetd映射将内网服务转发出来. 1. 下载解压 ...
- Android 应用内多语言切换
最近公司的 App 里需要用到多语言切换,简单来说,就是如果用户没有选择语言选项时,App 默认跟随系统语言,如果用户在 App 内进行了语言设置,那么就使用用户设置的语言.当然,你会发现,App 的 ...