P2149 Elaxia的路线
P2149 Elaxia的路线
题意简述: 在一个n(n<=1500)个点的无向图里找两对点之间的最短路径的最长重合部分,即在保证最短路的情况下两条路径的最长重合长度(最短路不为一)
- 思路:
- 两边dij,第一遍最短路,第二遍在保证最短路的情况下让重合路径长度最长的先出队
- 代码:
#include <cstdio>
#include <iostream>
#include <queue>
#include <cctype>
#include <cstring>
#include <algorithm>
using namespace std; #define res register int
inline int read()
{
int x=0,f=1; char ch;
while(!isdigit(ch=getchar()))if(ch=='-')f=-1;
while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
return f*x;
} const int N=1500+10,M=N*N*2;
int x1,y1,x2,y2,n,m,tot=1; struct node{
int x,y;//xΪ×î¶Ì·³¤¶È£¬yΪ×î³¤ÖØºÏ·¾¶³¤¶È
bool operator >(const node &n2) const{return x==n2.x?y<n2.y:x>n2.x;}
bool operator <(const node &n2) const{return x==n2.x?y>n2.y:x<n2.x;}//СÓÚ ->¸üÓÅ
node(int _x=0,int _y=0) : x(_x),y(_y){}
bool operator ==(const node &n2) const{return x==n2.x&&y==n2.y;}
node operator +(const node &n2) const{return node(x+n2.x,y+n2.y);}
}edge[M],dis[M];
int ver[M],nxt[M],head[N],vis[N]; inline void add(int x,int y,int z)
{
ver[++tot]=y; nxt[tot]=head[x]; head[x]=tot; edge[tot]=node(z,0);
} struct point{
int p; node d;
bool operator <(const point &n2) const{return d>n2.d;}
point(int _p=0,node _d=node(0,0)) : p(_p),d(_d) {}
}; inline void dij(int s)
{
priority_queue <point> q;
for(res i=1 ; i<=n ; ++i) dis[i]=node(0x3f3f3f3f,0),vis[i]=0;
dis[s]=node(0,0); q.push(point(s,dis[s]));
while(q.size())
{
point now=q.top(); q.pop();
int x=now.p;
if(vis[x]) continue; vis[x]=1;
for(res i=head[x] ; i ; i=nxt[i])
{
int y=ver[i];
if(dis[y]>dis[x]+edge[i])
{
dis[y]=dis[x]+edge[i];
q.push(point(y,dis[y]));
}
}
}
} void dfs(int x)
{
for(res i=head[x] ; i ; i=nxt[i])
{
int y=ver[i];
if(dis[y]+edge[i]==dis[x])
{
edge[i].y+=edge[i].x; edge[i^1].y+=edge[i].x;
dfs(y);
}
}
} int main()
{
n=read(); m=read();
x1=read(); y1=read(); x2=read(); y2=read();
for(res i=1 ; i<=m ; ++i)
{
int x=read(),y=read(),z=read(); add(x,y,z); add(y,x,z);
}
dij(x1); dfs(y1); dij(x2);
printf("%d\n",dis[y2].y);
return 0;
}
P2149 Elaxia的路线的更多相关文章
- 洛谷P2149 Elaxia的路线
传送门啦 分析: 我最开始想的是跑两遍最短路,然后记录一下最短路走了哪些边(如果有两条最短路就选经过边多的),打上标记.两边之后找两次都标记的边有多少就行了. 但...我并没有实现出来. 最后让我们看 ...
- 洛谷 P2149 [SDOI2009]Elaxia的路线 解题报告
P2149 [SDOI2009]Elaxia的路线 题目描述 最近,Elaxia和w**的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间. Elaxia ...
- 洛谷——P2149 [SDOI2009]Elaxia的路线
P2149 [SDOI2009]Elaxia的路线 题目描述 最近,Elaxia和w的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间.Elaxia和w每 ...
- Luogu P2149 [SDOI2009]Elaxia的路线(最短路+记忆化搜索)
P2149 [SDOI2009]Elaxia的路线 题意 题目描述 最近,\(Elaxia\)和\(w**\)的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们必须合理地安排两个人在一起的 ...
- BZOJ-1880 Elaxia的路线 SPFA+枚举
1880: [Sdoi2009]Elaxia的路线 Time Limit: 4 Sec Memory Limit: 64 MB Submit: 921 Solved: 354 [Submit][Sta ...
- BZOJ 1880: [Sdoi2009]Elaxia的路线( 最短路 + dp )
找出同时在他们最短路上的边(dijkstra + dfs), 组成新图, 新图DAG的最长路就是答案...因为两人走同一条路但是不同方向也可以, 所以要把一种一个的s,t换一下再更新一次答案 ---- ...
- 【BZOJ1880】[Sdoi2009]Elaxia的路线(最短路)
[BZOJ1880][Sdoi2009]Elaxia的路线(最短路) 题面 BZOJ 洛谷 题解 假装我们知道了任意两点间的最短路,那么我们怎么求解答案呢? 不难发现公共路径一定是一段连续的路径(如果 ...
- 【BZOJ 1880】 [Sdoi2009]Elaxia的路线 (最短路树)
1880: [Sdoi2009]Elaxia的路线 Description 最近,Elaxia和w**的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间. ...
- BZOJ1880: [Sdoi2009]Elaxia的路线(最短路)
1880: [Sdoi2009]Elaxia的路线 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 2049 Solved: 805 题目链接:https ...
随机推荐
- yii2 beforeAction 重定向问题
不跳转代码:return $this->redirect('http://www.yiichina.com/'); 跳转代码:return $this->redirect('http:// ...
- Django介绍(1)
https://www.cnblogs.com/yuanchenqi/articles/6083427.html 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构, ...
- C语言中 指针的基础知识总结, 指针数组的理解
1: 指针变量所占的字节数与操作系统为位数有关,64位操作系统下,占8个字节,32位操作系统下,占4个字节 2: 指针变量的本质是用来放地址,而一般的变量是放数值的3: 脱衣服法则: a[2] 变成 ...
- Shell编程-05-Shell中条件测试与比较
目录 Shell脚本条件测试 Shell文件测试 Shell字符测试 Shell整数测试 Shell逻辑测试 Shell条件测试总结 Shell脚本条件测试 在Shell脚本中各种条件结构和流 ...
- (博弈)Simple Game --codeforces--570B
链接: http://codeforces.com/problemset/problem/570/B http://acm.hust.edu.cn/vjudge/contest/view.action ...
- linux导出Excel The maximum column width for an individual cell is 255 characters
linux环境到处Excel报错: The maximum column width for an individual cell is 255 characters 解决方案: for (int i ...
- MFC OnOk(),OnCancel(),OnClose(),OnDestroy()的区别总结
MFC OnOk(),OnCancel(),OnClose(),OnDestroy()的区别总结(转) 第一,OnOK()和OnCancel()是CDialog基类的成员函数,而OnClose()和O ...
- 理解maven项目的pom.xml文件中,<scope>标签的作用——作用域以及依赖传递
问题介绍: 在maven项目中,最关键的就是pom.xml这个文件,这个文件是用来导入maven项目依赖的jar包以及一些插件等. 在这个文件中导入jar包使用的标签是<dependency&g ...
- Windows Server 2008 R2远程桌面服务配置和授权激活
远程桌面服务安装好之后使用的是120天临时授权,所以会跳出以下提示,我们介绍远程桌面授权的激活. 现在我们使用命令 mstsc /admin 强制登录服务器 需要在“远程桌面服务”--安装“远程桌面授 ...
- 发展科技到底有什么用,转NASA专家给一位修女的一封信
问题补充:我们难道不应该把这些资金用于更深入的医疗保障和减少贫穷吗? 我们为何要仰望星空,花大量的金钱和精力探索那不可预知的宇宙呢?NASA科学家写给非洲修女的一封信回答得特别好,也特别震撼人心.—— ...