Fire-Fighting Hero(多源最短路和单源最短路)
2024-10-20 07:56:40
题: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 ;
}
最新文章
- javascript对象的一点理解
- ARM Linux 3.x的设备树(Device Tree)
- Android手机 Fildder真机抓包
- Codeforces Round #376 (Div. 2) C. Socks---并查集+贪心
- display:inline-block的空白bug问题
- 网站常见问题及解决方法(div/css)
- Android中滑动关闭Activity
- IIS中如何建立FTP服务
- HTML5.1就要来了
- hdu Just a Hook
- java的特点跨平台原理以及JDK的安装
- java封装的方法
- BZOJ_2343_[Usaco2011 Open]修剪草坪 _单调队列_DP
- oracle 表 库实例 空间
- struts2_HelloWorld
- centos6.5磁盘扩容
- Where is NuGet in VS2017 Community?
- hdu 1704 Rank (floyd闭包)
- 【转】Deep Learning(深度学习)学习笔记整理系列之(五)
- LINQ中的";延迟查询";特性【转】
热门文章
- 设计模式讲解4:Bridge模式源码
- python刷LeetCode:2.两数相加
- ubuntu16.04 + Kdevelop + ROS开发和创建catkin_ws工作空间
- 运营商何时会取消40G或100G流量封顶呢?短期内有望实现吗?
- HDU 2544 最短路 【Dijkstra模板题】
- Python与mongo交互
- 吴裕雄--天生自然 PHP开发学习:表单 - 验证邮件和URL
- 在MyEclipse的Maven环境下,使用mybatis-generator插件自动生成映射文件(接口)及实体类
- JavaSE--Java 的基本程序设计结构
- [Scoi2016]背单词(trie+贪心)