Fire-Fighting Hero(多源最短路和单源最短路)
题:https://nanti.jisuanke.com/t/41349
分析:对于hero来说,走单源最短路,然后遍历dis数组中的最大值即可找到,对于消防员来说,走多源最短路,只需要建个超级起点连接各个消防点,边权为0走spfa即可出dis数组
注意:得无向边
#include<bits/stdc++.h>
using namespace std;
typedef long long ll; const ll INF=1e18;
const int M=2e3+;
ll dist[M]; struct node{
int v,nextt;
ll w;
}e[(M*M)<<]; int tot,vis[M],head[M],a[M],sign[M];
void addedge(int u,int v,ll w){
e[tot].v=v;
e[tot].nextt=head[u];
e[tot].w=w;
head[u]=tot++;
} void spfa(int s)
{
queue<int>q;
while(!q.empty())
q.pop();
memset(dist,0x7f,sizeof dist);
//cout<<dist[0]<<endl;
memset(vis,false,sizeof vis);
dist[s]=;
vis[s]=true;
q.push(s);
while(!q.empty()) {
int u=q.front();
q.pop();
vis[u]=false;
for(int i=head[u];~i; i=e[i].nextt) {
int v=e[i].v;
if(dist[v]>dist[u]+e[i].w) {
dist[v]=dist[u]+e[i].w;
if(!vis[v]) {
vis[v]=true;
q.push(v);
}
}
}
}
} int main(){
int t;
scanf("%d",&t);
while(t--){
int n,m,he,k,C,s=;
scanf("%d%d%d%d%d",&n,&m,&he,&k,&C); for(int i=;i<=n;i++)
head[i]=-,sign[i]=;
tot=; for(int i=;i<=k;i++)
scanf("%d",&a[i]),sign[a[i]]=; while(m--) {
int u,v;
ll w;
scanf("%d%d%lld",&u,&v,&w);
addedge(u,v,w);
addedge(v,u,w);
} spfa(he); ll maxxhe=0ll; for(int i=;i<=n;i++)
maxxhe=max(maxxhe,dist[i]); for(int i=;i<=k;i++)
addedge(s,a[i],);
spfa(s); ll maxxren=0ll;
for(int i=;i<=n;i++){
if(sign[i]==)
maxxren=max(dist[i],maxxren);
} maxxren*=1ll*C;
// cout<<maxxhe<<"!!"<<maxxren<<endl;
if(maxxhe<=maxxren){
printf("%lld\n",maxxhe);
}
else
printf("%lld\n",maxxren/C); }
return ;
}
Fire-Fighting Hero(多源最短路和单源最短路)的更多相关文章
- 模板C++ 03图论算法 1最短路之单源最短路(SPFA)
3.1最短路之单源最短路(SPFA) 松弛:常听人说松弛,一直不懂,后来明白其实就是更新某点到源点最短距离. 邻接表:表示与一个点联通的所有路. 如果从一个点沿着某条路径出发,又回到了自己,而且所经过 ...
- 最短路模板(Dijkstra & Dijkstra算法+堆优化 & bellman_ford & 单源最短路SPFA)
关于几个的区别和联系:http://www.cnblogs.com/zswbky/p/5432353.html d.每组的第一行是三个整数T,S和D,表示有T条路,和草儿家相邻的城市的有S个(草儿家到 ...
- 图论-单源最短路-SPFA算法
有关概念: 最短路问题:若在图中的每一条边都有对应的权值,求从一点到另一点之间权值和最小的路径 SPFA算法的功能是求固定起点到图中其余各点的的最短路(单源最短路径) 约定:图中不存在负权环,用邻接表 ...
- 单源最短路径Dijkstra算法,多源最短路径Floyd算法
1.单源最短路径 (1)无权图的单源最短路径 /*无权单源最短路径*/ void UnWeighted(LGraph Graph, Vertex S) { std::queue<Vertex&g ...
- [ACM_图论] Domino Effect (POJ1135 Dijkstra算法 SSSP 单源最短路算法 中等 模板)
Description Did you know that you can use domino bones for other things besides playing Dominoes? Ta ...
- 用scheme语言实现SPFA算法(单源最短路)
最近自己陷入了很长时间的学习和思考之中,突然发现好久没有更新博文了,于是便想更新一篇. 这篇文章是我之前程序设计语言课作业中一段代码,用scheme语言实现单源最段路算法.当时的我,花了一整天时间,学 ...
- POJ1511 Invitation Cards(多源单汇最短路)
边取反,从汇点跑单源最短路即可. #include<cstdio> #include<cstring> #include<queue> #include<al ...
- 单源最短路_SPFA_C++
当我们需要求一个点到其它所有点的最短路时,我们可以采用SPFA算法 代码特别好写,而且可以有环,但是不能有负权环,时间复杂度是O(α(n)n),n为边数,α(n)为n的反阿克曼函数,一般小于等于4 模 ...
- HDU 5637 Transform 单源最短路
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5637 题意: http://bestcoder.hdu.edu.cn/contests/contes ...
随机推荐
- 基于表单的web暴力破解
暴力破解 概述 连续性尝试+字典+自动化 如果一个网站没有对登录接口实施防暴力破解的措施,或者实施了不合理的措施,则该网站存在暴力破解漏洞. 是否要求用户设置了复杂的密码 是否每次认证都是用安全的验证 ...
- UML-快速的更新分析
1.目标 本章主要介绍需求和领域分析中的一些变更. 迭代1阶段:结束时,举行为期1-2天的简短的需求讨论会,内容是调查和详细编写更多需求+解决初始阶段反馈问题. 迭代2阶段:结束时,举行为期1-2天的 ...
- [极客大挑战 2019]BuyFlag
0x00 知识点 php中的strcmp漏洞 说明: int strcmp ( string $str1 , string $str2 ) 参数 str1第一个字符串.str2第二个字符串.如果 st ...
- IDEA忽略文件,防止git提交不想提交的文件
IDEA忽略文件,防止git提交不想提交的文件 方法一(只对没有add到仓库的文件有效): 方法二(只对没有add到仓库的文件有效): 在IDEA中安装.ignore插件.创建好了之后: 安装.git ...
- svg用例
圆<circle cx="x" cy="y" r="r" style="stroke:black;fill:none&quo ...
- vscode显示当前文件完整路径信息
Code->Preferences->Settings 搜索window.title 原本是activeEditorShort,修改 activeEditorShort => act ...
- 为什么在SSM中的dao层不用写@Repository注解
1. Mybatis 接口编程中dao 层接口没有注解和 为什么能被实例化为bean? 在Spring配置Mybatis的文件中我们可以看到如下代码: <bean class="or ...
- spring中的Filter使用
https://blog.csdn.net/bibiwannbe/article/details/81302920
- C#判断两个字符串是否相等的方法 ,还有char赋空值办法。
string str1="Test"; string str2 = "Test"; if (str1==str2) //第一种判断方式 { //第二种判断方式 ...
- Linux 下载安装
安装教程:https://www.runoob.com/linux/linux-install.html Linux图形界面与命令行界面切换https://blog.csdn.net/ab522628 ...