Elaxia 的路线——抛弃Dijkstra 吧

  方法是看的题解。大神告诉了我怎样快速判断特定点是否在其它两点之间的最短路上,感激不尽。我自己刚开始打的(屎)Dijkstra 又和从前一样是答案错误,这次少一些,两个。果断抛弃了Dijkstra,用上了辣鸡SPFA,过了。

 1 #include<algorithm>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<vector>
 5 #include<cstdio>
 6 #include<queue>
 7 using namespace std;
 8 const int N=2048,INF=0x3f3f3f3f;
 9 int res,n,m,sx,sy,tx,ty;
10 int d1[N],d2[N],d3[N],d4[N];
11 vector<int> gr[N],dis[N];
12 bool check(int x){return d1[x]+d2[x]==d1[sy]&&d3[x]+d4[x]==d3[ty];}
13 int spfa(int sp,int d[N]){
14     bool vis[N];
15     queue<int> q;
16     memset(vis,0,sizeof vis);
17
18     d[sp]=0;vis[sp]=true;
19     q.push(sp);
20     while(!q.empty()){
21         int x=q.front();q.pop();
22         vis[x]=false;
23         for(int i=0;i<gr[x].size();i++)
24             if(d[gr[x][i]]>d[x]+dis[x][i]){
25                 d[gr[x][i]]=d[x]+dis[x][i];
26                 if(!vis[gr[x][i]])q.push(gr[x][i]),vis[gr[x][i]]=true;
27             }
28     }
29 }
30 int main(){
31     memset(d1,0x3f,sizeof d1);memset(d2,0x3f,sizeof d2);
32     memset(d3,0x3f,sizeof d3);memset(d4,0x3f,sizeof d4);
33
34     cin>>n>>m>>sx>>sy>>tx>>ty;
35     for(int i=1;i<=m;i++){
36         int x,y,v;scanf("%d%d%d",&x,&y,&v);
37         gr[x].push_back(y);dis[x].push_back(v);
38         gr[y].push_back(x);dis[y].push_back(v);
39     }
40
41     spfa(sx,d1);spfa(sy,d2);
42     spfa(tx,d3);spfa(ty,d4);
43
44     for(int i=1;i<=n;i++)
45         if(check(i))
46             for(int j=i+1;j<=n;j++)
47                 if(check(j))
48                     res=max(res,abs(d1[i]-d1[j]));
49     cout<<res<<endl;
50     return 0;
51 }

Method_01

  洛谷 Yukikaze 500ms

时间: 2024-10-21 14:18:22

Elaxia 的路线——抛弃Dijkstra 吧的相关文章

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

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

bzoj1880: [Sdoi2009]Elaxia的路线

1880: [Sdoi2009]Elaxia的路线 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 1035  Solved: 412[Submit][Status][Discuss] Description 最近,Elaxia和w**的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间.Elaxia和w**每天都要奔波于宿舍和实验室之间,他们 希望在节约时间的前提下,一起走的时间尽可能的长. 现在已知的是E

[SDOI2009]Elaxia的路线 SPFA+Topo

P2149 [SDOI2009]Elaxia的路线 题目描述 最近,Elaxia和w的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间.Elaxia和w每天都要奔波于宿舍和实验室之间,他们 希望在节约时间的前提下,一起走的时间尽可能的长. 现在已知的是Elaxia和w**所在的宿舍和实验室的编号以及学校的地图:地图上有N个路 口,M条路,经过每条路都需要一定的时间. 具体地说,就是要求无向图中,两对点间最短路的最长公共路径. 输入输出格式 输入格式:

洛谷——P2149 [SDOI2009]Elaxia的路线

P2149 [SDOI2009]Elaxia的路线 题目描述 最近,Elaxia和w的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间.Elaxia和w每天都要奔波于宿舍和实验室之间,他们 希望在节约时间的前提下,一起走的时间尽可能的长. 现在已知的是Elaxia和w**所在的宿舍和实验室的编号以及学校的地图:地图上有N个路 口,M条路,经过每条路都需要一定的时间. 具体地说,就是要求无向图中,两对点间最短路的最长公共路径. 输入输出格式 输入格式:

bzoj 1880: [Sdoi2009]Elaxia的路线(拓扑排序+spfa)

1880: [Sdoi2009]Elaxia的路线 Time Limit: 4 Sec  Memory Limit: 64 MB Submit: 974  Solved: 382 [Submit][Status][Discuss] Description 最近,Elaxia和w**的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间.Elaxia和w**每天都要奔波于宿舍和实验室之间,他们 希望在节约时间的前提下,一起走的时间尽可能的长. 现在已知的是

【BZOJ 1880】 [Sdoi2009]Elaxia的路线

1880: [Sdoi2009]Elaxia的路线 Time Limit: 4 Sec  Memory Limit: 64 MB Submit: 660  Solved: 242 [Submit][Status][Discuss] Description 最近,Elaxia和w**的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间.Elaxia和w**每天都要奔波于宿舍和实验室之间,他们 希望在节约时间的前提下,一起走的时间尽可能的长. 现在已知的是

[SDOI2009]Elaxia的路线

P2149 [SDOI2009]Elaxia的路线 求无向图中,两对点间最短路的最长公共路径 喵啊-这题真心喵啊-orzorz 先spfa求出x1, y1, x2, y2的单源最短路 然后把x1到y1的最短路们建图 判断方式(精髓!): if(dis[0][uu] + ww + dis[1][vv] == dis[0][y1]){ addedge(uu, vv, ww, 1); ind[vv]++; } 蒟蒻欲膜又止[划掉 注意 建完是有向图哦 在建完图之后 用同样的方式判断这个新图上有哪些边在

BZOJ 1880: [Sdoi2009]Elaxia的路线

Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 1461  Solved: 574[Submit][Status][Discuss] Description 最近,Elaxia和w**的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间.Elaxia和w**每天都要奔波于宿舍和实验室之间,他们 希望在节约时间的前提下,一起走的时间尽可能的长. 现在已知的是Elaxia和w**所在的宿舍和实验室的编号以及学校的

洛谷—— P2149 [SDOI2009]Elaxia的路线

https://www.luogu.org/problem/show?pid=2149 题目描述 最近,Elaxia和w的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间.Elaxia和w每天都要奔波于宿舍和实验室之间,他们 希望在节约时间的前提下,一起走的时间尽可能的长. 现在已知的是Elaxia和w**所在的宿舍和实验室的编号以及学校的地图:地图上有N个路 口,M条路,经过每条路都需要一定的时间. 具体地说,就是要求无向图中,两对点间最短路的最长