luogu

bzoj

Orz自己想出神仙正解的sxy

描述略

直接把所有起点推进去跑dijkstra...

并且染色,就是记录到这个点的最短路是由哪个起点引导出来的

然后再把所有边反指跑一次...

之后枚举每一条边两边的点不同色就可以更新答案

这个可能少有的代码比说得清楚...

 #include<cstdio>
 #include<queue>
 #include<algorithm>
 using std::min;
 using std::priority_queue;
 typedef long long lint;
 ,M=;
 template<typename tp>inline void read(tp &kk)
 {
     tp ret=,f=;char ch=getchar();
     ;ch=getchar();}
     +ch-';ch=getchar();}
     kk=ret*f;
 }
 int n,m,k;
 struct sumireko{int to,ne;lint v;}e[M];
 int he[N],ecnt;
 void addline(int f,int t,lint v)
 {
     if(f==t) return;
     e[++ecnt].to=t;
     e[ecnt].ne=he[f];
     e[ecnt].v=v;
     he[f]=ecnt;
 }

 int X[M],Y[M],l[N];lint V[M];
 lint d[][N];][N];
 struct shino{
     lint di;int id;
     shino(){}
     shino(int ii,lint dd){id=ii,di=dd;}
     bool friend operator < (shino a,shino b){return a.di>b.di;}
 }g;
 priority_queue<shino>q;
 bool vv[N];
 void dijkstra(lint *dis,int *c)
 {
     ;i<=n;i++) dis[i]=0x3f3f3f3f3f3f3f3f;
     ;i<=k;i++) dis[l[i]]=,c[l[i]]=l[i],q.push(shino(l[i],));
     while(!q.empty())
     {
         g=q.top();
         q.pop();
         int x=g.id;
         vv[x]=;
         for(int i=he[x],t;i;i=e[i].ne)
         {
             t=e[i].to;
             if(vv[t]) continue;
             if(dis[t]>dis[x]+e[i].v)
             {
                 dis[t]=dis[x]+e[i].v;
                 c[t]=c[x];
                 q.push(shino(t,dis[t]));
             }
         }
     }
 }

 ;i<=n;i++) he[i]=,vv[i]=;ecnt=;}
 int xi,yi,vi,T;
 int main()
 {
     read(T);
     while(T--)
     {
         read(n),read(m),read(k);
         ;i<=m;i++) read(X[i]),read(Y[i]),read(V[i]),addline(X[i],Y[i],V[i]);
         ;i<=k;i++) read(l[i]);
         dijkstra(d[],fa[]);
         clr();
         ;i<=m;i++) addline(Y[i],X[i],V[i]);
         dijkstra(d[],fa[]);
         lint ans=0x3f3f3f3f3f3f3f3f;
         ;i<=m;i++)
         {
             xi=X[i],yi=Y[i],vi=V[i];
             ][xi]&&fa[][yi]&&(fa[][xi]^fa[][yi]))
             {
                 ans=min(ans,d[][xi]+vi+d[][yi]);
             }
         }
         printf("%lld\n",ans);
         clr();
     }
     ;
 }

哭唧唧

P5304 [GXOI/GZOI2019]旅行者(最短路/乱搞)的更多相关文章

  1. P5304 [GXOI/GZOI2019]旅行者

    题目地址:P5304 [GXOI/GZOI2019]旅行者 这里是官方题解 一个图 \(n\) 点 \(m\) 条边,里面有 \(k\) 个特殊点,问这 \(k\) 个点之间两两最短路的最小值是多少? ...

  2. 洛谷 P5304 [GXOI/GZOI2019]旅行者(最短路)

    洛谷:传送门 bzoj:传送门 参考资料: [1]:https://xht37.blog.luogu.org/p5304-gxoigzoi2019-lv-xing-zhe [2]:http://www ...

  3. luogu P5304 [GXOI/GZOI2019]旅行者

    传送门 所以这个\(5s\)是SMG 暴力是枚举每一个点跑最短路,然后有一个很拿衣服幼稚的想法,就是把所有给出的关键点当出发点,都丢到队列里,求最短路的时候如果当前点\(x\)某个相邻的点\(y\)是 ...

  4. 【题解】Luogu P5304 [GXOI/GZOI2019]旅行者

    原题传送门 题意:给你k个点,让你求两两最短路之间的最小值 我们考虑二进制拆分,使得每两个点都有机会分在不同的组\((A:0,B:1)\)中,从源点\(S\)向\(A/B\)中的点连边权为0的边,从\ ...

  5. [洛谷P5304][GXOI/GZOI2019]旅行者

    题目大意: 有一张 \(n(n\leqslant10^5)\) 个点 \(m(m\leqslant5\times10^5)\) 条边的有向有正权图,有$k(2\leqslant k\leqslant ...

  6. 【BZOJ5506】[GXOI/GZOI2019]旅行者(最短路)

    [BZOJ5506][GXOI/GZOI2019]旅行者(最短路) 题面 BZOJ 洛谷 题解 正着做一遍\(dij\)求出最短路径以及从谁转移过来的,反过来做一遍,如果两个点不由同一个点转移过来就更 ...

  7. [LOJ3087][GXOI/GZOI2019]旅行者——堆优化dijkstra

    题目链接: [GXOI/GZOI2019]旅行者 我们考虑每条边的贡献,对每个点求出能到达它的最近的感兴趣的城市(设为$f[i]$,最短距离设为$a[i]$)和它能到达的离它最近的感兴趣的城市(设为$ ...

  8. [GXOI/GZOI2019]旅行者 (最短路)

    题意 给定一个有向图,其中一些顶点为关键点.求这些关键点两两之间最小距离. 题解 考试时没怎么想写了50分暴力走了.以为是什么强连通分量的解法,结果就是个最短路.直接从关键点跑一次最短路dis[0], ...

  9. BZOJ5506 GXOI/GZOI2019旅行者(最短路)

    本以为是个二进制分组傻逼题https://www.cnblogs.com/Gloid/p/9545753.html,实际上有神仙的一个log做法https://www.cnblogs.com/asul ...

随机推荐

  1. jQuery得到多个值只能用取Class ,不能用取ID

    如果页面有多个checkbox: <input type="checkbox"   class="checkApply"    id="chec ...

  2. asp.net mvc razer

    Asp.net MVC Razor模板引擎技巧分享 http://www.cnblogs.com/JustRun1983/p/3545303.html 全新的membership框架Asp.net I ...

  3. Oracle:ORA-12154: TNS:could not resolve the connect identifier specified

    ORA-12154: TNS: 无法解析指定的连接标识符 注册表:regedit 安装oracle后用Net Manager 配置好服务名称之后,测试成功,可是PL/SQL无法连接 http://we ...

  4. bzoj 1640||1692: [Usaco2007 Dec]队列变换【后缀数组】

    注意输出是80字符个一行!! 首先贪心很显然,就是两头尽量拿小的. 然后需要处理两头一样的情况,显然是选字典序小的一串,把数组反着接在原数组后面,然后跑sa,判断的时候直接比较rk数组 #includ ...

  5. python3 写CSV文件多一个空行的解决办法

    Python文档中有提到: open('eggs.csv', newline='') 也就是说,打开文件的时候多指定一个参数.Python文档中也有这样的示例: import csvwith open ...

  6. [Usaco2011 Feb]Generic Cow Protests

    Description Farmer John's N (1 <= N <= 100,000) cows are lined up in a row and numbered 1..N. ...

  7. 背包DP HDOJ 5410 CRB and His Birthday

    题目传送门 题意:有n个商店,有m金钱,一个商店买x件商品需要x*w[i]的金钱,得到a[i] * x + b[i]件商品(x > 0),问最多能买到多少件商品 01背包+完全背包:首先x == ...

  8. Java中的流(2)字节流-InputStream和OutputStream

    字节流的两个顶层类是抽象类:InputStream和OutputStream 1. OutputStream void write(int b) 往流中写一个字节b void write(byte b ...

  9. java中什么包不需要导入

    java中Math.random()*10;在math包中不需要导入: 即import java.lang.Math; 即lang下的所有包都不需要导入.

  10. Java实现求二叉树的路径和

    题: 解: 这道题考的是如何找出一个二叉树里所有的序列. 我的思路是先从根节点开始遍历,找出所有的子节点,因为每个子节点只有一个父节点,再根据每个子节点向上遍历找出所有的序列,再判断序列的总和. 这样 ...