题目:洛谷P2176。

题目大意:有n个点m条无向边,一个人要从1走到n,他会走最短路。现在可以让一条边的长度翻倍,求翻倍后这个人要多走多少距离。

解题思路:首先可以知道,翻倍肯定是在最短路上的某条边翻,否则他走的路不会变。我们先跑一遍最短路,记录下走的边,再枚举哪条边翻倍,然后跑最短路,记录下答案即可。

此题好像卡SPFA,于是我用堆优化Dijkstra秒杀。

时间复杂度$O(nm\log n)$。

C++ Code:

#include<cstdio>
#include<cstring>
#include<ext/pb_ds/priority_queue.hpp>
using namespace __gnu_pbds;
struct edge{
int from,to,dis,nxt;
}e[10005];
struct heapnode{
int u,d;
bool operator<(const heapnode& rhs)const{return d>rhs.d;}
};
priority_queue<heapnode>q;
int n,m,head[10005],cnt,d[10005],prev[10005],prea[10005];
inline void addedge(int from,int to,int dis){
e[++cnt]=(edge){from,to,dis,head[from]};
head[from]=cnt;
e[++cnt]=(edge){to,from,dis,head[to]};
head[to]=cnt;
}
void dijkstra(){
memset(d,0x3f,sizeof d);
memset(prev,0,sizeof prev);
q.push((heapnode){1,d[1]=0});
while(!q.empty()){
heapnode x=q.top();
q.pop();
int u=x.u;
if(d[u]!=x.d)continue;
for(int i=head[u];i;i=e[i].nxt){
int v=e[i].to;
if(d[v]>d[u]+e[i].dis){
d[v]=d[u]+e[i].dis;
prev[v]=i;
q.push((heapnode){v,d[v]});
}
}
}
}
int main(){
cnt=1;
scanf("%d%d",&n,&m);
for(;m--;){
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
addedge(x,y,z);
}
dijkstra();
memcpy(prea,prev,sizeof prea);
int ans=d[n],mx=0;
for(int i=prea[n];i;i=prea[e[i].from]){
e[i].dis*=2;
e[i^1].dis*=2;
dijkstra();
if(d[n]-ans>mx)mx=d[n]-ans;
e[i].dis/=2;
e[i^1].dis/=2;
}
printf("%d\n",mx);
return 0;
}

[USACO14FEB]路障Roadblock的更多相关文章

  1. 洛谷——P2176 [USACO14FEB]路障Roadblock

    P2176 [USACO14FEB]路障Roadblock 题目描述 每天早晨,FJ从家中穿过农场走到牛棚.农场由 N 块农田组成,农田通过 M 条双向道路连接,每条路有一定长度.FJ 的房子在 1 ...

  2. P2176 [USACO14FEB]路障Roadblock

    题目描述 每天早晨,FJ从家中穿过农场走到牛棚.农场由 N 块农田组成,农田通过 M 条双向道路连接,每条路有一定长度.FJ 的房子在 1 号田,牛棚在 N 号田.没有两块田被多条道路连接,以适当的路 ...

  3. 洛谷 P2176 [USACO14FEB]路障Roadblock

    题目描述 每天早晨,FJ从家中穿过农场走到牛棚.农场由 N 块农田组成,农田通过 M 条双向道路连接,每条路有一定长度.FJ 的房子在 1 号田,牛棚在 N 号田.没有两块田被多条道路连接,以适当的路 ...

  4. Luogu P2176 [USACO14FEB]路障Roadblock

    解题思路 这是一道最短路题目,不知道大家有没有做过玛丽卡这道题目,如果没做,在做完这道题之后可以去拿个双倍经验哦 先求出一张图中的最短路径,并将其记录下来,我们首先思考:要有增量的前提是新的最短路径比 ...

  5. 洛谷 2176 [USACO14FEB]路障Roadblock

    [题意概述] 修改图中任一一条边的边权,使其加倍,问怎样使修改后图中的1~n的最短路最大.输出最短路的增量. [题解] 先跑一遍dijkstra求出1~n的路径长度,记录下经过的边.枚举这些边进行修改 ...

  6. 洛谷—— P2176 [USACO14FEB]路障Roadblock

    https://www.luogu.org/problem/show?pid=2176 题目描述 每天早晨,FJ从家中穿过农场走到牛棚.农场由 N 块农田组成,农田通过 M 条双向道路连接,每条路有一 ...

  7. USACO Roadblock

    洛谷 P2176 [USACO14FEB]路障Roadblock 洛谷传送门 JDOJ 2406: USACO 2014 Feb Silver 2.Roadblock JDOJ传送门1 JDOJ 24 ...

  8. SPFA(Shortest Path Faster Algorithm)

    特别说明 本文转载自三金(frinemore)的博客: 点这 前言 1.关于SPFA,它没死. 2.接下来的所有代码,都是自己手写的(未检查正确性,补充的代码有检查过,是对的),有错误请帮忙指出. S ...

  9. DP&图论 DAY 7 上午

    DP&图论  DAY 7  上午 图论练习题 P2176 [USACO14FEB]路障Roadblock 先跑最短路(最多n条边,否则出环) 枚举每条边,加倍,再跑 dijkstra 取最大 ...

随机推荐

  1. Ubuntu14.04下Mongodb(在线安装方式|apt-get)安装部署步骤(图文详解)(博主推荐)

    不多说,直接上干货! 本博文介绍了MongoDB,并详细指引读者在Ubuntu下MongoDB的安装和使用.本教程在Ubuntu14.04下测试通过. 一.MongoDB介绍 MongoDB 是一个是 ...

  2. ETL工具的功能和kettle如何来提供这些功能

    不多说,直接上干货! 大家会有一个疑惑,本系列博客是Kettle,那怎么扯上ETL呢? Kettle是一款国外开源的ETL工具,纯java编写,可以在Window.Linux.Unix上运行. 说白了 ...

  3. spring 发送邮件代码示例(带附件和不带附件的)

    import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; import org.springframe ...

  4. (转载)带有res资源文件的项目 需要导成jar包 供别人使用的解决方法

    比如说自己的成品项目,名字是MyObject,需要导出成jar包,让别人的项目调用,但是自己的项目还包含有图片.layout布局.libs里面的依赖包等等: 步骤: 1.MyObject项目需要“is ...

  5. Java数据库连接——jdbc-odbc桥连接方式及汉字乱码问题

    jdbc-odbc桥连接方式操作数据库SU(Course),其中Course属性有Cno,Cname,Cpno,Ccredit. 步骤: 1.配置数据源 控制面板下搜索管理工具->ODBC数据源 ...

  6. RabbitMq笔记(2)

    今天收获不少,记个笔记. namespace RabbitMQTest { class Program { static void Main(string[] args) { Consumer(); ...

  7. windows下mysql解压版安装及centos下mysql root密码忘记

    windows安装 1. 下载zip版的解压后将bin添加到path. 2. 修改解压目录D:\mysql\mysql-5.7.12-winx64下的my.ini,设置路径: 还要添加 [client ...

  8. Python学习---Day96

    转载:http://www.cnblogs.com/wupeiqi/articles/6229292.html Scrapy Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可 ...

  9. NOIp2018模拟赛三十五

    两道大数据结构把我砸懵 成绩:未提交 Orz xfz两道正解 A:[BZOJ4049][CREC2014B]mountainous landscape B:CJB的大作(CF改编题)

  10. GDOI2018爆炸记

    Day0 12:45p.m. 从初中部出发前回班探望了一下同学,受到热烈欢迎(?) 13:15p.m. 出发去中山,路上本来想用mac看fz的,结果ass字幕导入失败,心态爆炸*1:后来成功获取xfz ...