题目传送门

开始就想直接正向跑一遍Dij把到各点的最短路加起来即可,后来发现与样例少了些,于是再读题发现需要也求出学生们回来的最短路。

但是注意到本题是有向图,如果是无向图就好说。

那么我们怎么解决?可以建一个反图。于是本题就解决了==

Code

  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<cstring>
  4. #include<queue>
  5. #define maxn 2000090
  6.  
  7. using namespace std;
  8. typedef long long ll;
  9.  
  10. int n,m,tot;
  11. int head[maxn],vis[maxn],hea[maxn];
  12. ll ans,dis[maxn],d[maxn];
  13. struct node{
  14. int to,next;
  15. int val;
  16. }edge[maxn],edg[maxn];
  17.  
  18. void add(int x,int y,int z)
  19. {
  20. edge[++tot].to=y;
  21. edge[tot].next=head[x];
  22. head[x]=tot;
  23. edge[tot].val=z;
  24. }
  25.  
  26. void add_nega(int x,int y,int z)
  27. {
  28. edg[++tot].to=y;
  29. edg[tot].next=hea[x];
  30. hea[x]=tot;
  31. edg[tot].val=z;
  32. }
  33.  
  34. void dijkstra()
  35. {
  36. priority_queue<pair<int,int> >q;
  37. memset(dis,,sizeof(dis));
  38. q.push(make_pair(,));dis[]=;
  39. while(!q.empty())
  40. {
  41. int u=q.top().second;q.pop();
  42. if(vis[u]) continue;
  43. vis[u]=;
  44. for(int i=head[u];i;i=edge[i].next)
  45. {
  46. int v=edge[i].to;
  47. if(dis[v]>dis[u]+edge[i].val)
  48. {
  49. dis[v]=dis[u]+edge[i].val;
  50. if(!vis[v]) q.push(make_pair(-dis[v],v));
  51. }
  52. }
  53. }
  54. }
  55.  
  56. void dijk()
  57. {
  58. priority_queue<pair<int,int> >q;
  59. memset(d,,sizeof(d));
  60. memset(vis,,sizeof(vis));
  61. q.push(make_pair(,));d[]=;
  62. while(!q.empty())
  63. {
  64. int u=q.top().second;q.pop();
  65. if(vis[u]) continue;
  66. vis[u]=;
  67. for(int i=hea[u];i;i=edg[i].next)
  68. {
  69. int v=edg[i].to;
  70. if(d[v]>d[u]+edg[i].val)
  71. {
  72. d[v]=d[u]+edg[i].val;
  73. if(!vis[v]) q.push(make_pair(-d[v],v));
  74. }
  75. }
  76. }
  77. }
  78.  
  79. int main()
  80. {
  81. scanf("%d%d",&n,&m);
  82. for(int i=;i<=m;i++)
  83. {
  84. int x=,y=,z=;
  85. scanf("%d%d%d",&x,&y,&z);
  86. add(x,y,z);add_nega(y,x,z);
  87. }
  88. dijkstra();
  89. dijk();
  90. for(int i=;i<=n;i++)
  91. ans+=dis[i]+d[i]/*,printf("%d\n",dis[i])*/;
  92. printf("%lld",ans);
  93. return ;
  94. }

LuoguP1342请柬 【最短路/建反图】By cellur925的更多相关文章

  1. Luogu P1073 最优贸易【最短路/建反图】 By cellur925

    题目传送门 这么经典的题目,还是看了lyd的题解....唉难过. 一句话题意:在一张点有全都的图上找一条从1到n的路径,存在两个点p,q(p<q),使val[q]-val[p]最大. 给出的图是 ...

  2. POJ3268 Silver Cow Party (建反图跑两遍Dij)

    One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1..N is going to attend the big co ...

  3. POJ 2438 Children’s Dining (哈密顿图模板题之巧妙建反图 )

    题目链接 Description Usually children in kindergarten like to quarrel with each other. This situation an ...

  4. hdu 2647 Reward(拓扑排序+反图)

    题目链接:https://vjudge.net/contest/218427#problem/C 题目大意: 老板要给很多员工发奖金, 但是部分员工有个虚伪心态, 认为自己的奖金必须比某些人高才心理平 ...

  5. 炸弹:线段树优化建边+tarjan缩点+建反边+跑拓扑

    这道题我做了有半个月了...终于A了... 有图为证 一句话题解:二分LR线段树优化建边+tarjan缩点+建反边+跑拓扑统计答案 首先我们根据题意,判断出来要炸弹可以连着炸,就是这个炸弹能炸到的可以 ...

  6. POJ 2502 Subway ( 最短路 && 最短路建图 )

    题意 : 给出二维平面上的两个点代表起点以及终点,接下来给出若干条地铁线路,除了在地铁线路上行进的速度为 40km/h 其余的点到点间都只能用过步行且其速度为 10km/h ,现问你从起点到终点的最短 ...

  7. [Luogu1342] 请柬 - 最短路模板

    Description 在电视时代,没有多少人观看戏剧表演.Malidinesia古董喜剧演员意识到这一事实,他们想宣传剧院,尤其是古色古香的喜剧片.他们已经打印请帖和所有必要的信息和计划.许多学生被 ...

  8. LUOGU P1342 请柬(最短路)

    传送门 解题思路 又是一道语文题,弄清楚题意之后其实就能想出来了,从1跑一遍最短路,把$dis[n]$加入答案.在建个反图跑一遍最短路,把$dis[n]_$加入最短路就行了.第一遍是去的时候,第二遍是 ...

  9. IndiaHacks 2016 - Online Edition (Div. 1 + Div. 2) E. Bear and Forgotten Tree 2 bfs set 反图的生成树

    E. Bear and Forgotten Tree 2 题目连接: http://www.codeforces.com/contest/653/problem/E Description A tre ...

随机推荐

  1. PHP读取excel(6)

    有时候我们只需要读取某些指定sheet,具体代码如下: <?php header("Content-Type:text/html;charset=utf-8"); //引入读 ...

  2. 带GPG签名的Git tag

    原文地址http://airk000.github.io/git/2013/09/30/git-tag-with-gpg-key Git tag ###Tag用来做什么? Tag即标签,用以给项目仓储 ...

  3. UBUNTU安装PHP,即所谓得LAMP

    Linux+Apache+Mysql/MariaDB+Perl/PHP/Python一组经常使用来搭建动态站点或者server的开源软件,本身都是各自独立的程序,可是由于常被放在一起使用.拥有了越来越 ...

  4. HDOJ_ How can I read input data until the end of file ?

    Language C C++ Pascal To read numbers int n;while(scanf("%d", &n) != EOF){ ...} int n; ...

  5. vc6.0的一些快捷键

    1.检测程序中的括号是否匹配    把光标移动到需要检测的括号(如大括号{}.方括号[].圆括号()和尖括号<>)前面,键入快捷键“Ctrl+]”.如果括号匹配正确,光标就跳到匹配的括号处 ...

  6. 细数AutoLayout以来UIView和UIViewController新增的相关API

    本文转载至 http://www.itjhwd.com/autolayout-uiview-uiviewcontroller-api/ 细数AutoLayout以来UIView和UIViewContr ...

  7. MySQL 权限生效

    用GRANT.REVOKE或SET PASSWORD对授权表施行的修改会立即被服务器注意到. 如果你手工地修改授权表(使用INSERT.UPDATE等等),你应该执行一个FLUSH PRIVILEGE ...

  8. HDU 5651xiaoxin juju needs help

    xiaoxin juju needs help Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/ ...

  9. 配置webpack中externals来减少打包后vendor.js的体积

    在日常的项目开发中,我们会用到各种第三方库来提高效率,但随之带来的问题就是打包后的vendor.js体积过大,导致加载时空白页时间过长,给用户的体验太差.为此我们需要减少vendor.js的体积,从本 ...

  10. Hihocoder #1098 : 最小生成树二·Kruskal算法 ( *【模板】 )

    #1098 : 最小生成树二·Kruscal算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 随着小Hi拥有城市数目的增加,在之间所使用的Prim算法已经无法继续使用 ...