bzoj5506:[gzoi2019]旅行者
传送门
正反两边dijkstra染色,然后枚举一下边,求出最小值就好啦
代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
void read(int &x) {
char ch; bool ok;
for(ok=0,ch=getchar(); !isdigit(ch); ch=getchar()) if(ch=='-') ok=1;
for(x=0; isdigit(ch); x=x*10+ch-'0',ch=getchar()); if(ok) x=-x;
}
#define rg register
#define ll long long
const int maxn=1e5+10;bool vis[maxn];
struct oo{int x;ll dis;};
priority_queue<oo>q;ll ans,dis[2][maxn];
bool operator<(oo a,oo b){return a.dis>b.dis;}
int n,T,m,k,col[2][maxn],pre[maxn*5],nxt[maxn*5],v[maxn*5],h[maxn],cnt;
int x[maxn*5],y[maxn*5],z[maxn*5],t[maxn];
void add(int x,int y,int z){pre[++cnt]=y,nxt[cnt]=h[x],h[x]=cnt,v[cnt]=z;}
void dijkstra(ll *dis,int *col){
memset(vis,0,sizeof vis);
for(rg int i=1;i<=k;i++)dis[t[i]]=0,col[t[i]]=t[i],q.push((oo){t[i],dis[t[i]]});
while(!q.empty()){
oo x=q.top();q.pop();if(vis[x.x])continue;vis[x.x]=1;
for(rg int i=h[x.x];i;i=nxt[i])
if(!vis[pre[i]]&&dis[pre[i]]>dis[x.x]+v[i])
dis[pre[i]]=dis[x.x]+v[i],col[pre[i]]=col[x.x],
q.push((oo){pre[i],dis[pre[i]]});
}
}
int main()
{
read(T);
while(T--){
read(n),read(m),read(k);cnt=0;memset(h,0,sizeof h);
memset(col,0,sizeof col);memset(dis,63,sizeof dis);
for(rg int i=1;i<=m;i++)read(x[i]),read(y[i]),read(z[i]),add(x[i],y[i],z[i]);
for(rg int i=1;i<=k;i++)read(t[i]);
dijkstra(dis[0],col[0]);memset(h,0,sizeof h),cnt=0;
for(rg int i=1;i<=m;i++)add(y[i],x[i],z[i]);
dijkstra(dis[1],col[1]);ans=1e18;
for(rg int i=1;i<=m;i++)
if(col[0][x[i]]&&col[1][y[i]]&&col[0][x[i]]!=col[1][y[i]])ans=min(ans,dis[0][x[i]]+dis[1][y[i]]+z[i]);
printf("%lld\n",ans);
}
}
bzoj5506:[gzoi2019]旅行者的更多相关文章
- 【BZOJ5506】[GXOI/GZOI2019]旅行者(最短路)
[BZOJ5506][GXOI/GZOI2019]旅行者(最短路) 题面 BZOJ 洛谷 题解 正着做一遍\(dij\)求出最短路径以及从谁转移过来的,反过来做一遍,如果两个点不由同一个点转移过来就更 ...
- [LOJ3087][GXOI/GZOI2019]旅行者——堆优化dijkstra
题目链接: [GXOI/GZOI2019]旅行者 我们考虑每条边的贡献,对每个点求出能到达它的最近的感兴趣的城市(设为$f[i]$,最短距离设为$a[i]$)和它能到达的离它最近的感兴趣的城市(设为$ ...
- P5304 [GXOI/GZOI2019]旅行者
题目地址:P5304 [GXOI/GZOI2019]旅行者 这里是官方题解 一个图 \(n\) 点 \(m\) 条边,里面有 \(k\) 个特殊点,问这 \(k\) 个点之间两两最短路的最小值是多少? ...
- BZOJ5506 GXOI/GZOI2019旅行者(最短路)
本以为是个二进制分组傻逼题https://www.cnblogs.com/Gloid/p/9545753.html,实际上有神仙的一个log做法https://www.cnblogs.com/asul ...
- 洛谷 P 5 3 0 4 [GXOI/GZOI2019]旅行者
题目描述 J 国有 n 座城市,这些城市之间通过 m 条单向道路相连,已知每条道路的长度. 一次,居住在 J 国的 Rainbow 邀请 Vani 来作客.不过,作为一名资深的旅行者,Vani 只对 ...
- 洛谷 P5304 [GXOI/GZOI2019]旅行者(最短路)
洛谷:传送门 bzoj:传送门 参考资料: [1]:https://xht37.blog.luogu.org/p5304-gxoigzoi2019-lv-xing-zhe [2]:http://www ...
- luogu P5304 [GXOI/GZOI2019]旅行者
传送门 所以这个\(5s\)是SMG 暴力是枚举每一个点跑最短路,然后有一个很拿衣服幼稚的想法,就是把所有给出的关键点当出发点,都丢到队列里,求最短路的时候如果当前点\(x\)某个相邻的点\(y\)是 ...
- [GXOI/GZOI2019]旅行者
就我感觉这道题很神仙吗/kel 仔细想想应该也是一种适用范围挺广的做法. 考虑我们可以通过dijkstra在O(nlogn)求出一个点集到另外一个点集的最短路. 那么我们可以通过一些划分点集的方式使得 ...
- P5304 [GXOI/GZOI2019]旅行者(最短路/乱搞)
luogu bzoj Orz自己想出神仙正解的sxy 描述略 直接把所有起点推进去跑dijkstra... 并且染色,就是记录到这个点的最短路是由哪个起点引导出来的 然后再把所有边反指跑一次... 之 ...
随机推荐
- 如何在MySQl数据库中给已有的数据表添加自增ID?
由于使用MySQL数据库还没有多久的缘故,在搭建后台往数据库导入数据的时候发现新增的表单是没有自增id的,因次就有了上面这个问题. 解决方法 1.给某一张表先增加一个字段,这里我们就以node_tab ...
- Gym - 100851G:Generators(人尽皆知但是WA题)
题意:现在有函数,每一项Xi=(A*X(i-1)+B)%C.现在给定N个函数以及K:X0,A,B,C.然你再每个函数选择一个数,使得其和最大,而且不被K整除. X0,A,B,C<=1e3 :K& ...
- Qt Quick之TableView的使用
本博只是简单的展示TableView的基本使用(TableView.style:TableViewStyle.headerDelegate.rowDelegate.itemDelegate.Table ...
- iOS NET Error Code
see NSURLError.h Define NSURLErrorUnknown = -, NSURLErrorCancelled = -, NSURLErrorBadURL = -, NSURLE ...
- 三种 Failover 之 Client-Side Connect time Failover、Client-Side TAF、Service-Side TAF
三种 Failover 之 Client-Side Connect time Failover.Client-Side TAF.Service-Side TAF 理论背景 Oracle RAC 同时 ...
- cloudera上面安装Spark2.0
Cloudera默认值是提供Spark1.6的安装,下面介绍如何来安装spark2.1 1. csd包:http://archive.cloudera.com/spark2/csd/ 2. parce ...
- Asp.net工作流workflow实战之书签(二)
1.winform(web程序)下使用工作流 怎样才能像控制台那样让winform或web页面窗体阻塞等待工作流的继续执行呢 2.BookMark书签 书签:和一般的书签看书的时候方便查看上次看的内容 ...
- HDOJ2141(map在二分搜索中的应用)
#include<iostream> #include<cstdio> #include<map> #include<algorithm> using ...
- 一 Optional
从Java8 引入的一个很有趣的特性是Optional类.Optional类主要解决的问题是臭名昭著的空指针异常(NullPointerException). 一: 创建Optional对象: ...
- spring--设置注入VS构造注入
1.在传统的程序设计中,调用亲自创建被调用者的实例,即由程序控制“对象之间的依赖关系”,这种方式的耦合度比较高:控制反转就是将由程序控制的“对象间的依赖关系”转交给Ioc容器来进行控制,被调用者的实例 ...