先标记上一个人所有最短路上的边(同时也要标记反向边)

然后拿着另一个人最短路上的边(会构成一个DAG)去做拓扑dp,记从原点到某个点的最大的某个路径的被标记的边的个数

  1. #include<bits/stdc++.h>
  2. #define pa pair<int,int>
  3. #define CLR(a,x) memset(a,x,sizeof(a))
  4. using namespace std;
  5. typedef long long ll;
  6. const int maxn=;
  7.  
  8. inline ll rd(){
  9. ll x=;char c=getchar();int neg=;
  10. while(c<''||c>''){if(c=='-') neg=-;c=getchar();}
  11. while(c>=''&&c<='') x=x*+c-'',c=getchar();
  12. return x*neg;
  13. }
  14.  
  15. struct Edge{
  16. int a,b,l,ne;
  17. bool u;
  18. }eg[maxn*maxn];
  19. int egh[maxn],ect=;
  20. int N,M,s1,s2,t1,t2;
  21. int d1[maxn],d2[maxn],ine[maxn],cnt[maxn];
  22. bool flag[maxn];
  23. priority_queue<pa,vector<pa>,greater<pa> > q;
  24. queue<int> q2;
  25.  
  26. inline void adeg(int a,int b,int c){
  27. eg[++ect].a=a,eg[ect].b=b,eg[ect].l=c,eg[ect].ne=egh[a],egh[a]=ect;
  28. }
  29.  
  30. inline void dijkstra(int *dis,int s){
  31. CLR(flag,);
  32. dis[s]=;q.push(make_pair(,s));
  33. while(!q.empty()){
  34. int p=q.top().second;q.pop();
  35. if(flag[p]) continue;
  36. flag[p]=;
  37. for(int i=egh[p];i;i=eg[i].ne){
  38. int b=eg[i].b;
  39. if(dis[b]>dis[p]+eg[i].l){
  40. dis[b]=dis[p]+eg[i].l;
  41. q.push(make_pair(dis[b],b));
  42. }
  43. }
  44. }
  45. }
  46.  
  47. int main(){
  48. //freopen("","r",stdin);
  49. int i;
  50. N=rd(),M=rd(),s1=rd(),t1=rd(),s2=rd(),t2=rd();
  51. for(i=;i<=M;i++){
  52. int a=rd(),b=rd(),c=rd();
  53. adeg(a,b,c);adeg(b,a,c);
  54. }
  55. CLR(d1,);CLR(d2,);
  56. dijkstra(d1,s1);dijkstra(d2,t1);
  57. for(i=;i<=ect;i++){
  58. if(d1[eg[i].a]+eg[i].l+d2[eg[i].b]==d1[t1])
  59. eg[i].u=eg[i^].u=;
  60. }
  61. CLR(d1,),CLR(d2,);
  62. dijkstra(d1,s2);dijkstra(d2,t2);
  63. // for(i=1;i<=N;i++) printf("~%d %d %d\n",i,d1[i],d2[i]);
  64. for(i=;i<=ect;i++){
  65. if(d1[eg[i].a]+eg[i].l+d2[eg[i].b]==d1[t2])
  66. ine[eg[i].b]++;
  67. }
  68. q2.push(s2);
  69. while(!q2.empty()){
  70. int p=q2.front();q2.pop();
  71. // printf("!%d\n",p);
  72. for(int i=egh[p];i;i=eg[i].ne){
  73. int b=eg[i].b;
  74. if(d1[p]+eg[i].l+d2[eg[i].b]!=d1[t2]) continue;
  75. cnt[b]=max(cnt[b],cnt[p]+eg[i].u*eg[i].l);
  76. ine[b]--;
  77. if(!ine[b]) q2.push(b);
  78. }
  79. }
  80. printf("%d\n",cnt[t2]);
  81. return ;
  82. }

luogu2149 Elaxia的路线 (dijkstra+拓扑dp)的更多相关文章

  1. 【BZOJ1880】[Sdoi2009]Elaxia的路线 最短路+DP

    [BZOJ1880][Sdoi2009]Elaxia的路线 Description 最近,Elaxia和w**的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起 ...

  2. BZOJ 1880: [Sdoi2009]Elaxia的路线( 最短路 + dp )

    找出同时在他们最短路上的边(dijkstra + dfs), 组成新图, 新图DAG的最长路就是答案...因为两人走同一条路但是不同方向也可以, 所以要把一种一个的s,t换一下再更新一次答案 ---- ...

  3. bzoj1880: [Sdoi2009]Elaxia的路线(spfa,拓扑排序最长路)

    1880: [Sdoi2009]Elaxia的路线 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 1944  Solved: 759[Submit][St ...

  4. [luogu2149][bzoj1880][SDOI2009]Elaxia的路线【拓扑排序+最短路+DP】

    题目描述 最近,Elaxia和w的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间. Elaxia和w每天都要奔波于宿舍和实验室之间,他们 希望在节约时间 ...

  5. [BZOJ1880] [Sdoi2009] Elaxia的路线 (SPFA & 拓扑排序)

    Description 最近,Elaxia和w**的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间.Elaxia和w**每天都要奔波于宿舍和实验室之间, ...

  6. 【BZOJ1880】[SDOI2009]Elaxia的路线 (最短路+拓扑排序)

    [SDOI2009]Elaxia的路线 题目描述 最近,\(Elaxia\)和\(w**\)的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间. \(El ...

  7. BZOJ-1880 Elaxia的路线 SPFA+枚举

    1880: [Sdoi2009]Elaxia的路线 Time Limit: 4 Sec Memory Limit: 64 MB Submit: 921 Solved: 354 [Submit][Sta ...

  8. 洛谷 P2149 [SDOI2009]Elaxia的路线 解题报告

    P2149 [SDOI2009]Elaxia的路线 题目描述 最近,Elaxia和w**的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间. Elaxia ...

  9. Elaxia的路线

    Elaxia的路线 求无向图中,两对点间最短路的最长公共路径. 四遍spfa标出每条边的标记,然后用拓扑排序跑dp即可. exp:拓扑排序可以跑DAG上的dp. #include <cstdio ...

随机推荐

  1. RabbitMQ在特来电的深度应用

    特来电是一个互联网公司,而且是技术领先的互联网公司.互联网公司的标配是什么?答案就是缓存+MQ.没错,您没看错,就是MQ--消息队列,我们今天要讨论的RabbitMQ就是消息队列中功能非常强大的一种. ...

  2. Azure Load Balancer : 支持 IPv6

    越来越多的网站开始支持 IPv6,即使是哪些只提供 api 服务的站点也需要支持 IPv6,比如苹果应用商店中的 app 早就强制要求服务器端支持 IPv6 了.笔者在前文<Azure Load ...

  3. Linux mount 命令进阶

    笔者在<Linux mount 命令>一文中介绍了 mount 命令的基本用法,本文我们接着介绍 mount 命令的一些高级用法,比如 bind mounts(绑定挂载)和 shared ...

  4. Nginx 403 Forbidden 解决方案 史上最靠谱

    原因 1. SELinux为开启状态(enabled) 查看SELinux的状态 sestatus 如果不是 disables , 需要 vi /etc/selinux/config 将以前的 SEL ...

  5. 批量实现多台服务器之间ssh无密码登录的相互信任关系

    最近IDC上架了一批hadoop大数据业务服务器,由于集群环境需要在这些服务器之间实现ssh无密码登录的相互信任关系.具体的实现思路:在其中的任一台服务器上通过"ssh-keygen -t ...

  6. cookie详解(含vue-cookie)

    今天看到一篇cookie的文章,写的特别详细,感谢 晚晴幽草轩 的分享,原文链接http://mp.weixin.qq.com/s/NXrH7R8y2Dqxs9Ekm0u33w 原文如下,记录到此供以 ...

  7. 如何在css中设置按钮button中包含图片文字对齐方式

    <el-button class="class-management style="line-heught">班级管理

  8. M1m2分析报告

    个人博客链接: http://www.cnblogs.com/kjzxzzh/p/4074386.html http://www.cnblogs.com/kjzxzzh/p/4027699.html ...

  9. 《Linux内核设计与实现》第十八章读书笔记

    1.内核中的bug 内核中的bug表现得不像用户级程序中那么清晰——因为内核.用户以及硬件之间的交互会很微妙: 从隐藏在源代码中的错误到展现在目击者面前的bug,往往是经历一系列连锁反应的事件才可能触 ...

  10. github链接地址及

    http://www.github.com/houyanan1/test.git git 在本地创建分支,并且已经在该分支中开发了一段时间,那么commit到本地后,代码会做一个提交快照,在本地分支保 ...