[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为起点,做4次SPFA
分别算出dist[1~4][x]
那么我们可以找到他们各自最短路中相同的边
只要同时满足:
dist[1][u]+w(u,v)+dist[2][v]=dist[1][y1]
dist[3][u]+w(u,v)+dist[4][v]=dist[3][y2]
那么就说明,这条边同时处于两人的最短路上
然后将这些边建一个新图,可以保证无环
最后拓扑排序求出最长的链
但是,这道题隐藏了一个情况:
从y2~x2的w**与从x1~y1的Elaxia在边上相遇,也就是相向而行走一条边,也算共同走了这一条
也就是说,我们要将w**起点终点反转,重新建边和拓扑
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
struct Node
{
int next,to,dis;
}edge[],edge2[];
int head[],num,head2[],num2,dist[][],f[],n,d[],ans,m;
int s1,s2,t1,t2;
bool vis[];
void add(int u,int v,int w)
{
num++;
edge[num].next=head[u];
head[u]=num;
edge[num].to=v;
edge[num].dis=w;
}
void add_Top(int u,int v,int w)
{
num2++;
edge2[num2].next=head2[u];
head2[u]=num2;
edge2[num2].to=v;
edge2[num2].dis=w;
}
void SPFA(int S,int T,int p)
{int i;
queue<int>Q;
memset(dist[p],/,sizeof(dist[p]));
dist[p][S]=;
Q.push(S);
while (Q.empty()==)
{
int u=Q.front();
Q.pop();
vis[u]=;
for (i=head[u];i;i=edge[i].next)
{
int v=edge[i].to;
if (dist[p][v]>dist[p][u]+edge[i].dis)
{
dist[p][v]=dist[p][u]+edge[i].dis;
if (vis[v]==)
{vis[v]=;
Q.push(v);
}
}
}
}
}
void Top_sort()
{int i;
queue<int>Q;
memset(f,,sizeof(f));
for (i=;i<=n;i++)
if (d[i]==) Q.push(i),f[i]=;
while (Q.empty()==)
{
int u=Q.front();
Q.pop();
ans=max(ans,f[u]);
for (i=head2[u];i;i=edge2[i].next)
{
int v=edge2[i].to;
d[v]--;
f[v]=max(f[v],f[u]+edge2[i].dis);
if (d[v]==)
{
Q.push(v);
}
}
}
}
int main()
{int i,u,v,w,j;
cin>>n>>m;
cin>>s1>>t1>>s2>>t2;
for (i=;i<=m;i++)
{
scanf("%d%d%d",&u,&v,&w);
add(u,v,w);
add(v,u,w);
}
SPFA(s1,t1,);
SPFA(t1,s1,);
SPFA(s2,t2,);
SPFA(t2,s2,);
for (i=;i<=n;i++)
{
for (j=head[i];j;j=edge[j].next)
{
int v=edge[j].to;
if (dist[][i]+edge[j].dis+dist[][v]!=dist[][t1]) continue;
if (dist[][i]+edge[j].dis+dist[][v]!=dist[][t2]) continue;
add_Top(i,v,edge[j].dis);
d[v]++;
}
}
Top_sort();
SPFA(t2,s2,);
SPFA(s2,t2,);
memset(d,,sizeof(d));
memset(head2,,sizeof(head2));
for (i=;i<=n;i++)
{
for (j=head[i];j;j=edge[j].next)
{
int v=edge[j].to;
if (dist[][i]+edge[j].dis+dist[][v]!=dist[][t1]) continue;
if (dist[][i]+edge[j].dis+dist[][v]!=dist[][s2]) continue;
add_Top(i,v,edge[j].dis);
d[v]++;
}
}
Top_sort();
cout<<ans;
}
[Sdoi2009]Elaxia的路线的更多相关文章
- BZOJ 1880: [Sdoi2009]Elaxia的路线( 最短路 + dp )
找出同时在他们最短路上的边(dijkstra + dfs), 组成新图, 新图DAG的最长路就是答案...因为两人走同一条路但是不同方向也可以, 所以要把一种一个的s,t换一下再更新一次答案 ---- ...
- 【BZOJ1880】[Sdoi2009]Elaxia的路线(最短路)
[BZOJ1880][Sdoi2009]Elaxia的路线(最短路) 题面 BZOJ 洛谷 题解 假装我们知道了任意两点间的最短路,那么我们怎么求解答案呢? 不难发现公共路径一定是一段连续的路径(如果 ...
- 洛谷 P2149 [SDOI2009]Elaxia的路线 解题报告
P2149 [SDOI2009]Elaxia的路线 题目描述 最近,Elaxia和w**的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间. Elaxia ...
- 【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 ...
- 【BZOJ1880】[SDOI2009]Elaxia的路线 (最短路+拓扑排序)
[SDOI2009]Elaxia的路线 题目描述 最近,\(Elaxia\)和\(w**\)的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间. \(El ...
- 【BZOJ1880】[Sdoi2009]Elaxia的路线 最短路+DP
[BZOJ1880][Sdoi2009]Elaxia的路线 Description 最近,Elaxia和w**的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起 ...
- 洛谷——P2149 [SDOI2009]Elaxia的路线
P2149 [SDOI2009]Elaxia的路线 题目描述 最近,Elaxia和w的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间.Elaxia和w每 ...
- 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**\)的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们必须合理地安排两个人在一起的 ...
随机推荐
- Beta第六天
听说
- JAVA_SE基础——48.多态
面向对象程序设计的三个特点是封装.继承和多态.前面已经学习了前两个特点.本章节将介绍多态性. 多态:一个对象具备多种形态.(父类的引用类型变量指向了子类的对象)或者是接口 的引用类型变量指向了接口实现 ...
- Javascript 装饰器极速指南
pablo.png Decorators 是ES7中添加的JavaScript新特性.熟悉Typescript的同学应该更早的接触到这个特性,TypeScript早些时候已经支持Decorators的 ...
- GIT的安装及命令使用
http://blog.jobbole.com/78960/ 因此:多人协作工作模式一般是这样的: 首先,可以试图用git push origin branch-name推送自己的修改. 如果推送失败 ...
- emqtt 试用(五)emq 的用户密码认证
MQTT 认证设置 EMQ 消息服务器认证由一系列认证插件(Plugin)提供,系统支持按用户名密码.ClientID 或匿名认证. 系统默认开启匿名认证(anonymous),通过加载认证插件可开启 ...
- GIT入门笔记(14)- 链接到远程仓库
1.远程仓库地址https://github.com/ 2.注册远程仓库账号 3.生成ssh-key,并配置到github 由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以, ...
- mysql Access denied for user root@localhost错误解决方法
select * from user \G use mysql select * from user limit 1 \G update user set Host='%' where `User`= ...
- SSM中的登陆验证码
@Autowired private Producer captchaProducer = null; /** * 后台登录验证码 * @param request * @param response ...
- tomcat 热替换class
需要在server.xml中做以下配置: 在host节点内加入<Context>标签,reloadable属性设置为true. <Host name="localhost& ...
- Java-Maven(四):Eclipse集成Maven环境配置
一般maven都需要集成到IDE上使用的,而不是单独的使用,常见的maven可集成IDE:eclipse.IntelliJ IDEA.但这里就只学习eclipse集成maven的基础上,进行maven ...