P2176 [USACO14FEB]路障Roadblock
题目描述
每天早晨,FJ从家中穿过农场走到牛棚。农场由 N 块农田组成,农田通过 M 条双向道路连接,每条路有一定长度。FJ 的房子在 1 号田,牛棚在 N 号田。没有两块田被多条道路连接,以适当的路径顺序总是能在农场任意一对田间行走。当FZ从一块田走到另一块时,总是以总路长最短的道路顺序来走。
FJ 的牛呢,总是不安好心,决定干扰他每天早晨的计划。它们在 M 条路的某一条上安放一叠稻草堆,使这条路的长度加倍。牛希望选择一条路干扰使得FJ 从家到牛棚的路长增加最多。它们请你设计并告诉它们最大增量是多少。
输入输出格式
输入格式:
第 1 行:两个整数 N, M。
第 2 到 M+1 行:第 i+1 行包含三个整数 A_i, B_i, L_i,A_i 和 B_i 表示道路 i 连接的田的编号,L_i 表示路长。
输出格式:
第 1 行:一个整数,表示通过使某条路加倍而得到的最大增量。
输入输出样例
5 7 2 1 5 1 3 1 3 2 8 3 5 7 3 4 3 2 4 7 4 5 2
2
说明
【样例说明】
若使 3 和 4 之间的道路长加倍,最短路将由 1-3-4-5 变为 1-3-5。
【数据规模和约定】
对于 30%的数据,N <= 70,M <= 1,500。
对于 100%的数据,1 <= N <= 100,1 <= M <= 5,000,1 <= L_i <= 1,000,000。
题目大意:求将1--n上最短路的某条边的边权*2后新的最短路与原最短路长度差最大是多少
题解:暴力枚举最短路的每一条边*2再跑最短路取max
代码:
#include<iostream> #include<cstdio> #include<queue> #include<cstring> using namespace std;queue<int>q; int n,m,sumedge,cnt,cur,ans; int head[110],pre[110],cut[1100],bege[1100],dis[110],inq[110];struct Edge{int x,y,z,nxt;Edge(int x=0,int y=0,int z=0,int nxt=0):x(x),y(y),z(z),nxt(nxt){} }edge[5002*2];void add(int x,int y,int z){edge[++sumedge]=Edge(x,y,z,head[x]);head[x]=sumedge; }int spfa(){memset(dis,127/3,sizeof(dis));memset(inq,0,sizeof(inq));while(!q.empty())q.pop();q.push(1);dis[1]=0;inq[1]=1;while(!q.empty()){int now=q.front();q.pop();inq[now]=0;for(int i=head[now];i;i=edge[i].nxt){int v=edge[i].y;if(dis[v]>dis[now]+edge[i].z){dis[v]=dis[now]+edge[i].z;pre[v]=now;bege[v]=i;if(!inq[v]){inq[v]=1;q.push(v);}}}}return dis[n]; }int main(){scanf("%d%d",&n,&m);for(int i=1;i<=m;i++){int x,y,z;scanf("%d%d%d",&x,&y,&z);add(x,y,z);add(y,x,z);}cur=spfa(); // cout<<dis[3]<<" "<<dis[4]<<endl;for(int i=n;i;i=pre[i])cut[++cnt]=bege[i];for(int i=1;i<=cnt;i++){int k=cut[i];// cout<<k<<endl;if(k&1){edge[k].z*=2;edge[k+1].z*=2;}else {edge[k].z*=2;edge[k-1].z*=2;}ans=max(ans,spfa());if(k&1){edge[k].z/=2;edge[k+1].z/=2;}else{edge[k].z/=2;edge[k-1].z/=2;}} // cout<<ans<<" "<<cur<<endl;cout<<ans-cur<<endl;return 0; }
转载于:https://www.cnblogs.com/zzyh/p/7601923.html
P2176 [USACO14FEB]路障Roadblock相关推荐
- 图论复习(各类习题)
可以结合这篇博客进行复习:http://www.cnblogs.com/z360/p/7363034.html 一.强连通分量.缩点 习题: 洛谷--P2746 [USACO5.3]校园网Networ ...
- 洛谷 P3102 [USACO14FEB]秘密代码Secret Code
P3102 [USACO14FEB]秘密代码Secret Code 题目描述 Farmer John has secret message that he wants to hide from his ...
- [最小割最大流 || 最短路] roadblock Dinic SPFA + SLE
大家都很强, 可与之共勉. 震惊!cky 竟率兵攻打jyb! jyb 面对强敌,振作精神,想要抗击侵略.jyb 的国家一共有n 个城市,m 条距离为1 的双向道路.现在jyb的所在地是1 号城市,ck ...
- Roadblock for Mac(Safari广告内容拦截软件)
Roadblock Mac版是一款MacOS上Safari的强大的广告内容拦截软件.Roadblock Mac版可以帮助用户阻止烦人和不受欢迎的广告内容,保护您的隐私和安全,提高网页加载速度,并减少浏 ...
- Unity功能点---NavMesh的爬墙(OffMeshLink)和路障(NavMesh Obstacle)
记录一下自己的理解 好久没有使用NavMesh寻路系统了,回忆记录一下,主要是爬墙功能和路障功能: 爬墙功能需要在墙体添加OffMeshLing组件,然后设置爬墙的起始点,在墙上的运动点,从墙上下来的 ...
- Safari浏览器广告拦截工具:Roadblock
Roadblock是一款Mac上功能强大的广告内容拦截工具,可以帮助用户阻止有害的Web内容,保护您的隐私和安全性,缩短网页加载时间,并减少浏览数据的使用量.Roadblock适用于Mac,iPhon ...
- 搜索2(一、马的遍历 二、 求细胞数量 三、01迷宫 四、奇怪的电梯 五、海战 六、路障)
搜索2 一.马的遍历 二. 求细胞数量 三.01迷宫 四.奇怪的电梯 五.海战 六.路障 一.马的遍历 题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算 ...
- cocos2dx 植物大战僵尸 17 路障僵尸
原版植物大战僵尸的路障是饰品,能阻挡一部分伤害,在路障掉落前路障僵尸是不会受伤的. 如下为个人头脑风暴. 路障僵尸使用装饰者的话,需要继承自ZombieBase,由于图片原因,所以内部需要有一个普通僵 ...
- 第十八届智能车竞赛赛道上横断路障规格
一.前言 在 第十八届全国大学生智能车竞赛 赛道中,引入了"横断路障" 的赛道元素, 这个赛道元素与第十四届智能车竞赛 中的赛道路障是相同的.室内赛道组别车模需要在赛道路障前后 ...
最新文章
- mysql dbcollat_Mysql Server 层混杂信息字典表 | 全方位认识 information_schem(四)
- python进阶九_网络编程
- 启明云端WT32-CAM操作视频,让你快速上手ESP32camera应用
- Python统计分析--- 5.统计法与随机梯度下降(SGD)
- 解决添加Com引用 生成的Interop.*.dll 版本号永远是1.0的问题
- 开源框架:CocoaPods 安装学习教程
- mysql 密码修改时间_Mysql修改密码的方法
- Netty工作笔记0084---通过自定义协议解决粘包拆包问题2
- LVS——NAT网络地址转换模式
- 桌面没有计算机图标6,我的电脑图标没了怎么办
- bash脚本编程之十 函数
- 咏南IOCP REST中间件
- 省会、自治区、直辖市、特别行政区
- IEC 60068-2 规范介绍
- Python:正则re.sub实现简易的模板引擎
- mysql从指定条数开始查询_mysql数据库指定条数数据查询的主要方法
- 9大增长黑客牛人组织盘点,增长黑客发展奠基人!
- Swoole入门教程
- 移动通信发展历程见解(从1G到5G发展历程)
- 少儿编程课程体系需求