洛谷 P3905 道路重建
题目描述
从前,在一个王国中,在n个城市间有m条道路连接,而且任意两个城市之间至多有一条道路直接相连。在经过一次严重的战争之后,有d条道路被破坏了。国王想要修复国家的道路系统,现在有两个重要城市A和B之间的交通中断,国王希望尽快的恢复两个城市之间的连接。你的任务就是修复一些道路使A与B之间的连接恢复,并要求修复的道路长度最小。
输入输出格式
输入格式:
输入文件road.in,第一行为一个整数n(2<n≤100),表示城市的个数。这些城市编号从1到n。第二行为一个整数m(n-1≤m≤n(n-1)/2),表示道路的数目。接下来的m行,每行3个整数i,j,k(1≤i,j≤n,i≠j,0<k≤100),表示城市i与j之间有一条长为k的道路相连。
接下来一行为一个整数d(1≤d≤m),表示战后被破坏的道路的数目。在接下来的d行中,每行两个整数i和j,表示城市i与j之间直接相连的道路被破坏。
最后一行为两个整数A和B,代表需要恢复交通的两个重要城市。
输出格式:
输出文件road.out,仅一个整数,表示恢复A与B间的交通需要修复的道路总长度的最小值。
输入输出样例
3
2
1 2 1
2 3 2
1
1 2
1 3
1
#include <ext/pb_ds/priority_queue.hpp>
#include <iostream>
#include <cstdio>
#define N 10005
#define pa pair<int,int>
#define inf 0x3f3f3f3f
using namespace std;
using namespace __gnu_pbds;
typedef __gnu_pbds::priority_queue<pa,greater<pa>,pairing_heap_tag>heap;
heap::point_iterator id[N];
int n,m,d,cnt,S,T,to[N<<],far[N],head[N],nextt[N<<],val[N<<],f[][];
inline void ins(int u,int v,int w)
{
nextt[++cnt]=head[u];to[cnt]=v;val[cnt]=w;
head[u]=cnt;
}
void dijkstra()
{
heap q;
for(int i=;i<=n;++i) far[i]=inf;
far[S]=;
id[S]=q.push(make_pair(,S));
for(int u;!q.empty();)
{
u=q.top().second;q.pop();
for(int i=head[u];i;i=nextt[i])
{
int v=to[i];
if(far[v]>far[u]+val[i])
{
far[v]=far[u]+val[i];
if(id[v]!=) q.modify(id[v],make_pair(far[v],v));
else id[v]=q.push(make_pair(far[v],v));
}
}
}
}
int main(int argc,char *argv[])
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;++i)
for(int j=;j<=n;++j)
f[i][j]=(i!=j)*inf;
for(int x,y,z;m--;)
{
scanf("%d%d%d",&x,&y,&z);
f[x][y]=f[y][x]=z;
}
scanf("%d",&d);
for(int x,y;d--;)
{
scanf("%d%d",&x,&y);
f[x][y]*=-;f[y][x]*=-;
}
for(int i=;i<=n;++i)
for(int j=;j<=n;++j)
{
if(f[i][j]>=&&f[i][j]!=inf) ins(i,j,);
else if(f[i][j]<) ins(i,j,f[i][j]*(-));
}
scanf("%d%d",&S,&T);
dijkstra();
printf("%d\n",far[T]);
return ;
}
洛谷 P3905 道路重建的更多相关文章
- 洛谷——P3905 道路重建
P3905 道路重建 题目描述 从前,在一个王国中,在n个城市间有m条道路连接,而且任意两个城市之间至多有一条道路直接相连.在经过一次严重的战争之后,有d条道路被破坏了.国王想要修复国家的道路系统,现 ...
- 洛谷 P3905 道路重建 题解
P3905 道路重建 题目描述 从前,在一个王国中,在\(n\)个城市间有\(m\)条道路连接,而且任意两个城市之间至多有一条道路直接相连.在经过一次严重的战争之后,有\(d\)条道路被破坏了.国王想 ...
- 洛谷P3905 道路重建
题目:https://www.luogu.org/problemnew/show/P3905 分析: 此题是显然的最短路算法,只是看到一起删掉的一堆边感到十分棘手,而且还要求出的是最短添加边的总长度 ...
- P3905 道路重建
P3905 道路重建我一开始想错了,我的是类似kruskal,把毁坏的边从小到大加,并且判断联通性.但是这有一个问题,你可能会多加,就是这条边没用,但是它比较小,你也加上了.居然还有10分,数据也是水 ...
- 洛谷P4198 楼房重建 (分块)
洛谷P4198 楼房重建 题目描述 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上的房子拆了又建.建了又拆.他经常无聊地看着窗外发呆,数自己能够看到多少栋房子. 为了简化问题, ...
- P1359 租用游艇 && P3905 道路重建 ------Floyd算法
P1359 租用游艇 原题链接https://www.luogu.org/problemnew/show/P1359 P3905 道路重建 原题链接https://www.luogu.org/ ...
- 洛谷P1119-灾后重建-floyd算法
洛谷P1119-灾后重建 题目描述 给出\(B\)地区的村庄数NN,村庄编号从\(0\)到\(N-1\),和所有\(M\)条公路的长度,公路是双向的. 给出第\(i\)个村庄重建完成的时间\(t_i\ ...
- 【题解】洛谷P1070 道路游戏(线性DP)
次元传送门:洛谷P1070 思路 一开始以为要用什么玄学优化 没想到O3就可以过了 我们只需要设f[i]为到时间i时的最多金币 需要倒着推回去 即当前值可以从某个点来 那么状态转移方程为: f[i]= ...
- 【洛谷P1272】 重建道路
重建道路 题目链接 一场可怕的地震后,人们用N个牲口棚(1≤N≤150,编号1..N)重建了农夫John的牧场.由于人们没有时间建设多余的道路,所以现在从一个牲口棚到另一个牲口棚的道路是惟一的.因此, ...
随机推荐
- hdu1430 魔板(康拓展开 bfs预处理)
魔板 Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...
- 求范围内【l,r] , 内二进制的零比一多的数
#include<algorithm> #include<iostream> #include<cstring> #include<cstdlib> # ...
- 07-图5 Saving James Bond - Hard Version (30 分)
This time let us consider the situation in the movie "Live and Let Die" in which James Bon ...
- Linux字符设备简单示例
1. Linux字符设备是一种按字节来访问的设备,字符驱动则负责驱动字符设备,这样的驱动通常实现open.close.read和write系统调用.例如:串口.Led.按键等. 2. 通过字符设备文件 ...
- XtraFinder
About System Integrity Protection in OS X 10.11 Apple's article . System Integrity Protection blocks ...
- 1.centos7 安装zookeeper
1.安装jdk 1)查找jdk包: yum search java|grep jdk 2)安装: yum install -y java-1.8.0-openjdk.x86_64 2. 安装ZooKe ...
- mysql初始化
注意:--install前,必须用mysql启动命令的绝对路径 # 制作MySQL的Windows服务,在终端执行此命令: mysqld --install # 移除MySQL的Windows服务,在 ...
- vue写的ToDoList
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- python 使用csv.reader和csv.writer读写文件并转换成dataframe格式
import csv import pandas as pd ###csv.reader用法 ''' f=open(r"C:\Users\admin\pycdtest\wanyue\yuee ...
- (七)使用jedis连接单机和集群(一步一个坑踩出来的辛酸泪)
环境准备: redis-4.0.9,最新版了 ruby:redis-x.x.x.gem 这个gem什么版本都行,我redis4用3.0.0的gem正常跑 jedis-2.9.0.jar,最新版 ...