魏佬告诉我跑得快不一定赢,不跌跟头才是成功

我决定把这句话作为魏佬的名言记下来

等以后人人捧着魏佬语录的时候,我可以告诉他们魏佬从小就开始向我传授人生经验

但我就是跑的快,而且非常快

成功卡到了b站最优解第五

突然这是我的最后一篇题解了

下午就初赛了,要退役了

好慌啊,好慌啊,好慌啊,我要退役了,退役了,退役了,退役了

好慌啊,好慌啊,好慌啊,我要退役了,退役了,退役了,退役了

好慌啊,好慌啊,好慌啊,我要退役了,退役了,退役了,退役了

这道题其实不难的

首先我们得明确一点,这两个人赢能一起走的路肯定在最短路的公共边上

所以我们肯定得求出最短路的公共边

所以上来就先四遍\(Dij\),以这四个点为源点分别跑一遍最短路

之后我们再枚举所有的边,把那些最短路上的公共边建到一张新图里去

之后就有一个性质了,这两个人赢一起走的路径一定是连续的

毕竟两个人赢在一起了怎么会主动分开呢

所以建出新图来之后一遍记搜找出最长连续路径就好了

代码

#include<queue>
#include<cstring>
#include<cstdio>
#include<bitset>
#include<iostream>
#define re register
#define maxn 1505
#define mp std::make_pair
#define max(a,b) ((a)>(b)?(a):(b))
typedef std::pair<int,int> pii;
struct Edge
{
int v,nxt,w;
}e[1500*1500],E[1500*1500];
int head[maxn],d[4][maxn];
int Head[maxn];
int dp[maxn];
std::bitset<maxn> f;
int n,m,x1,y1,x2,y2,num;
int ans;
inline char gc()
{
static char buff[1000000],*S=buff,*T=buff;
return S==T&&(T=(S=buff)+fread(buff,1,1000000,stdin),S==T)?EOF:*S++;
}
inline int read()
{
char c=gc();
int x=0;
while(c<'0'||c>'9') c=gc();
while(c>='0'&&c<='9')
x=(x<<3)+(x<<1)+c-48,c=gc();
return x;
}
inline void add_edge(int x,int y,int z)
{
e[++num].v=y;
e[num].nxt=head[x];
e[num].w=z;
head[x]=num;
}
inline void connect(int x,int y,int z)
{
E[++num].v=y;
E[num].nxt=Head[x];
E[num].w=z;
Head[x]=num;
}
inline void Dij(int s,int o)
{
memset(d[o],20,sizeof(d[o]));
d[o][s]=0;
f.reset();
std::priority_queue<pii,std::vector<pii>,std::greater<pii> > q;
q.push(mp(d[o][s],s));
while(!q.empty())
{
int k=q.top().second;
q.pop();
if(f[k]) continue;
f[k]=1;
for(re int i=head[k];i;i=e[i].nxt)
if(d[o][e[i].v]>d[o][k]+e[i].w)
{
d[o][e[i].v]=d[o][k]+e[i].w;
q.push(mp(d[o][e[i].v],e[i].v));
}
}
}
int dfs(int x)
{
if(dp[x]) return dp[x];
for(re int i=Head[x];i;i=E[i].nxt)
dp[x]=max(dp[x],E[i].w+dfs(E[i].v));
return dp[x];
}
int main()
{
n=read(),m=read();
x1=read(),y1=read(),x2=read(),y2=read();
int x,y,z;
for(re int i=1;i<=m;i++)
x=read(),y=read(),z=read(),add_edge(x,y,z),add_edge(y,x,z);
Dij(x1,0),Dij(x2,1),Dij(y1,2),Dij(y2,3);
num=0;
for(re int i=1;i<=n;i++)
for(re int j=head[i];j;j=e[j].nxt)
if(d[0][i]+e[j].w+d[2][e[j].v]==d[0][y1]&&(d[1][e[j].v]+e[j].w+d[3][i]==d[1][y2]||d[1][i]+e[j].w+d[3][e[j].v]==d[1][y2]))
connect(i,e[j].v,e[j].w);
for(re int i=1;i<=n;i++)
ans=max(ans,dfs(i));
std::cout<<ans;
return 0;
}

【[SDOI2009]Elaxia的路线】的更多相关文章

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

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

  2. 【BZOJ1880】[Sdoi2009]Elaxia的路线(最短路)

    [BZOJ1880][Sdoi2009]Elaxia的路线(最短路) 题面 BZOJ 洛谷 题解 假装我们知道了任意两点间的最短路,那么我们怎么求解答案呢? 不难发现公共路径一定是一段连续的路径(如果 ...

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

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

  4. 【BZOJ 1880】 [Sdoi2009]Elaxia的路线 (最短路树)

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

  5. BZOJ1880: [Sdoi2009]Elaxia的路线(最短路)

    1880: [Sdoi2009]Elaxia的路线 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 2049  Solved: 805 题目链接:https ...

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

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

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

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

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

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

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

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

  10. Luogu P2149 [SDOI2009]Elaxia的路线(最短路+记忆化搜索)

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

随机推荐

  1. 编写更好的jQuery代码(转)

    这是一篇关于jQuery的文章,写到这里给初学者一些建议. 原文地址:http://flippinawesome.org/2013/11/25/writing-better-jquery-code/ ...

  2. GIT使用log命令显示中文乱码

    背静: 公司项目使用GIT进行代码同步. 问题: 之前代码提交后,有中文备注,但是在使用git log查看代码历史记录的时候发现显示乱码,如下: 后查询相关资料,现将解决办法总结如下: 1.运行Git ...

  3. C/C++:Windows cmd 指令

    一.快捷键1. Windows键 自从104键盘首次加入Windows键后,微软便一直计划为这个键添加更多功能,当然Win8也不例外. * Win+C:调出应用Charm菜单(Metro.传统桌面) ...

  4. 常见IT英语单词

    lable标签,master精通.主人,reference参考,release发布,schema模式,component组件,persistence持久化,generate生成产生,plugin插件, ...

  5. HDOJ2037 今年暑假不AC (经典的贪心问题)

    Description “今年暑假不AC?” “是的.” “那你干什么呢?” “看世界杯呀,笨蛋!” “@#$%^&*%...” 确实如此,世界杯来了,球迷的节日也来了,估计很多ACMer也会 ...

  6. Web安全相关(五):SQL注入(SQL Injection)

    简介 SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据 ...

  7. 可持久化trie(BZOJ5338: [TJOI2018]xor)

    题面 BZOJ Sol 显然是要维护一个区域的 \(trie\) 树,然后贪心 区间 \(trie\) 树??? 可持久化 \(trie\) 树??? 直接参考主席树表示出区间的方法建立 \(trie ...

  8. CSS实现太极图(3个div实现)

    使用三个div实现太极图的步骤如下: HTML部分 <div class="box"> <div class="yin"></di ...

  9. Node.js 学习笔记(一)--------- Node.js的认识和Linux部署

    Node.js 一.Node.js 简介  简单的说 Node.js 就是运行在服务端的可以解析并运行 JavaScript 脚本的软件. Node.js 是一个基于Chrome JavaScript ...

  10. easyui树形菜单实现

    需求:读取路径配置中的相对路径获取对应的子文件夹及其子文件并形成树形结构,加载xml文件,输入搜索关键字匹配xml里面的value节点的值对应的contact值的集合并进行搜索 例如:输入b,找到xm ...