【BZOJ1880】[Sdoi2009]Elaxia的路线 最短路+DP
【BZOJ1880】[Sdoi2009]Elaxia的路线
Description
Input
Output
Sample Input
1 6 7 8
1 2 1
2 5 2
2 3 3
3 4 2
3 9 5
4 5 3
4 6 4
4 7 2
5 8 1
7 9 1
Sample Output
HINT
对于30%的数据,N ≤ 100;
对于60%的数据,N ≤ 1000;
对于100%的数据,N ≤ 1500,输入数据保证没有重边和自环。
题解:先从x1,y1,x2都跑一边最短路,这样我们就可以快速判断一条边是否在最短路上了。最后从y2跑最短路,然后用f[x]表示从y2走到x时最长公共路径的长度。边最短路边DP即可。
然而好像被hack了。。。还是看大爷的题解吧。
- #include <cstring>
- #include <cstdio>
- #include <iostream>
- #include <queue>
- #include <utility>
- #define mp(A,B) make_pair(A,B)
- using namespace std;
- typedef pair<int,int> pii;
- int n,m,cnt,S1,S2,T1,T2,la,lb;
- int to[1000010],next[1000010],val[1000010],head[10010],dis[4][10010],vis[10010],f[10010];
- priority_queue<pii> q;
- inline int rd()
- {
- int ret=0,f=1; char gc=getchar();
- while(gc<'0'||gc>'9') {if(gc=='-')f=-f; gc=getchar();}
- while(gc>='0'&&gc<='9') ret=ret*10+gc-'0',gc=getchar();
- return ret*f;
- }
- void dijkstra(int S,int t)
- {
- int i,u;
- memset(vis,0,sizeof(vis));
- dis[t][S]=0,q.push(mp(0,S));
- while(!q.empty())
- {
- u=q.top().second,q.pop();
- if(vis[u]) continue;
- vis[u]=1;
- for(i=head[u];i!=-1;i=next[i]) if(dis[t][to[i]]>dis[t][u]+val[i])
- dis[t][to[i]]=dis[t][u]+val[i],q.push(mp(-dis[t][to[i]],to[i]));
- }
- }
- inline void add(int a,int b,int c)
- {
- to[cnt]=b,val[cnt]=c,next[cnt]=head[a],head[a]=cnt++;
- }
- int main()
- {
- n=rd(),m=rd(),S1=rd(),T1=rd(),S2=rd(),T2=rd();
- int i,a,b,c,u,v;
- memset(head,-1,sizeof(head));
- for(i=1;i<=m;i++) a=rd(),b=rd(),c=rd(),add(a,b,c),add(b,a,c);
- memset(dis,0x3f,sizeof(dis));
- dijkstra(S1,0),dijkstra(T1,1),dijkstra(S2,2),la=dis[0][T1],lb=dis[2][T2];
- memset(vis,0,sizeof(vis));
- dis[3][T2]=0,q.push(mp(0,T2));
- while(!q.empty())
- {
- u=q.top().second,q.pop();
- if(vis[u]) continue;
- vis[u]=1;
- for(i=head[u];i!=-1;i=next[i])
- {
- v=to[i];
- if(dis[3][v]>dis[3][u]+val[i])
- {
- dis[3][v]=dis[3][u]+val[i],f[v]=0;
- q.push(mp(-dis[3][v],v));
- }
- if(dis[3][v]==dis[3][u]+val[i])
- {
- f[v]=max(f[v],f[u]+val[i]*((dis[1][u]+dis[0][v]+val[i]==la||dis[0][u]+dis[1][v]+val[i]==la)&&(dis[3][u]+dis[2][v]+val[i]==lb||dis[2][u]+dis[3][v]+val[i]==lb)));
- }
- }
- }
- printf("%d",f[S2]);
- return 0;
- }//3 2 1 2 1 3 1 2 1 2 3 1
【BZOJ1880】[Sdoi2009]Elaxia的路线 最短路+DP的更多相关文章
- BZOJ 1880: [Sdoi2009]Elaxia的路线( 最短路 + dp )
找出同时在他们最短路上的边(dijkstra + dfs), 组成新图, 新图DAG的最长路就是答案...因为两人走同一条路但是不同方向也可以, 所以要把一种一个的s,t换一下再更新一次答案 ---- ...
- BZOJ1880:[SDOI2009]Elaxia的路线(最短路,拓扑排序)
Description 最近,Elaxia和w**的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间.Elaxia和w**每天都要奔波于宿舍和实验室之间, ...
- BZOJ1880: [Sdoi2009]Elaxia的路线(最短路)
1880: [Sdoi2009]Elaxia的路线 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 2049 Solved: 805 题目链接:https ...
- 【BZOJ1880】[SDOI2009]Elaxia的路线 (最短路+拓扑排序)
[SDOI2009]Elaxia的路线 题目描述 最近,\(Elaxia\)和\(w**\)的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间. \(El ...
- bzoj1880: [Sdoi2009]Elaxia的路线(spfa,拓扑排序最长路)
1880: [Sdoi2009]Elaxia的路线 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 1944 Solved: 759[Submit][St ...
- Luogu P2149 [SDOI2009]Elaxia的路线(最短路+记忆化搜索)
P2149 [SDOI2009]Elaxia的路线 题意 题目描述 最近,\(Elaxia\)和\(w**\)的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们必须合理地安排两个人在一起的 ...
- [luogu2149][bzoj1880][SDOI2009]Elaxia的路线【拓扑排序+最短路+DP】
题目描述 最近,Elaxia和w的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间. Elaxia和w每天都要奔波于宿舍和实验室之间,他们 希望在节约时间 ...
- BZOJ1880 [Sdoi2009]Elaxia的路线 【最短路 + dp】
题目 最近,Elaxia和w的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间.Elaxia和w每天都要奔波于宿舍和实验室之间,他们 希望在节约时间的前提 ...
- BZOJ1880: [Sdoi2009]Elaxia的路线
题意:求最短路最长公共距离. 考虑每一条边,如果满足dis(s1,u)+len+dis(v,t1)==dis(s1,t1) && dis(s2,u)+len+dis(v,t2)==di ...
随机推荐
- System.getProperty("line.separator")
转自:http://blog.sina.com.cn/s/blog_707577700100nv74.html 标题所写的代码能获得当前系统的换行符. 不要随便用 \n\r \n \r,因 ...
- iOS适配整理
iOS12适配问题 1.StatusBar内部结构改变 现象:crash crash log: -[_UIStatusBarIdentifier isEqualToString:]: unrecogn ...
- pip安装mysql报错 ld: library not found for -lssl
ld: library not found for -lssl clang: error: linker command failed with exit code (use -v to see in ...
- Windows利用命令行快速清除以及建立密码
我们Win10一般是没有管理员权限的!这就要求我们获取管理员权限了,一般有两种方法获取,我就介绍下面一种最简单的 老操作:WIn+R打开本窗口,输入:taskmgr 建立密码(administrato ...
- 详解Python中的迭代器和使用
对于一个列表,a = [1, 2, 3, 4],我们最常见的遍历方式就是: a = [1, 2, 3, 4] for item in a: print item 这里我们研究一种新的方式,就是迭代器. ...
- UIScreenAdaptive
using UnityEngine; namespace Com.Xyz.UI { [ExecuteInEditMode] [RequireComponent(typeof(UIRoot))] pub ...
- vue 项目中 自定义 webpack 的 配置文件(webpack.config.babel.js)
webpack.config.babel.js,这样命名是想让webpack在编译的时候自动识别es6的语法,现在貌似不需要这样命名了,之前用webpack1.x的时候貌似是需要的 let path ...
- Vue工程模板文件 webpack打包
1.github github地址:https://github.com/MengFangui/VueProjectTemplate 2.webpack配置 (1)基础配置webpack.base.c ...
- Android项目-几种常见的应用架构
android两种Tab分页的方式:TabActivity和ActivityGroup http://www.fengfly.com/plus/view-209429-1.html 1.单个Activ ...
- strults2标签s:set的用法
struts2标签<s:set></s:set>的用法.原理 http://liuna718-163-com.iteye.com/blog/1124654 我的例子: ...