BZOJ1774[USACO 2009 Dec Gold 2.Cow Toll Paths]——floyd
题目描述
从草地1到草地3的道路的“边过路费”为3,草地2的“点过路费”为5。 要从草地1走到草地4,可以从草地1走到草地3再走到草地5最后抵达草地4。如果这么走的话, 需要的“边过路费”为2+1+1=4,需要的点过路费为4(草地5的点过路费最大),所以总的花 费为4+4=8。 而从草地2到草地3的最佳路径是从草地2出发,抵达草地5,最后到达草地3。这么走的话,边 过路费为3+1=4,点过路费为5,总花费为4+5=9。输入
输出
样例输入
2
5
3
3
4
1 2 3
1 3 2
2 5 3
5 3 1
5 4 1
2 4 3
3 4 4
1 4
2 3
样例输出
9
#include<queue>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n,m,q;
int f[260][260];
int g[260][260];
int w[260];
int x,y,v;
void floyd()
{
for(int k=1;k<=n;k++)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(i==j||i==k||j==k)
{
continue;
}
if(f[i][j]>f[i][k]+f[k][j]-min(g[i][k],g[k][j]))
{
f[i][j]=f[i][k]+f[k][j]-min(g[i][k],g[k][j]);
g[i][j]=max(g[i][k],g[k][j]);
}
}
}
}
}
int main()
{
memset(f,0x7f7f7f7f,sizeof(f));
memset(g,0x7f7f7f7f,sizeof(g));
scanf("%d%d%d",&n,&m,&q);
for(int i=1;i<=n;i++)
{
scanf("%d",&w[i]);
g[i][i]=0;
}
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&v);
if(f[x][y]>v+max(w[x],w[y]))
{
f[x][y]=v+max(w[x],w[y]);
f[y][x]=f[x][y];
g[x][y]=max(w[x],w[y]);
g[y][x]=g[x][y];
}
}
floyd();
floyd();
floyd();
for(int i=1;i<=q;i++)
{
scanf("%d%d",&x,&y);
printf("%d\n",f[x][y]);
}
}
二、这才是正常做法。因为要最大点权,所以考虑将点权从小到大排序然后枚举中间点,这样就能保证这个中间点是除了两端点之外最大的。开两个数组分别表示不计路径最大点权的最短路长度和计路径最大点权的最短路长度然后跑一遍floyd就可以了。
附上代码。
#include<queue>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n,m,q;
int f[260][260];
int g[260][260];
int r[260];
struct node
{
int num;
int sum;
}a[260];
int x,y,v;
int cmp(node x,node y)
{
if(x.sum!=y.sum)
{
return x.sum<y.sum;
}
return x.num<y.num;
}
int main()
{
memset(g,0x3f,sizeof(g));
memset(f,0x3f,sizeof(f));
scanf("%d%d%d",&n,&m,&q);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i].sum);
a[i].num=i;
}
sort(a+1,a+1+n,cmp);
for(int i=1;i<=n;i++)
{
r[a[i].num]=i;
g[i][i]=0;
}
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&v);
g[r[x]][r[y]]=g[r[y]][r[x]]=min(g[r[x]][r[y]],v);
}
for(int k=1;k<=n;k++)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(i==j)
{
continue;
}
g[i][j]=min(g[i][j],g[i][k]+g[k][j]);
f[i][j]=min(f[i][j],g[i][j]+max(a[i].sum,max(a[j].sum,a[k].sum)));
}
}
}
for(int i=1;i<=q;i++)
{
scanf("%d%d",&x,&y);
printf("%d\n",f[r[x]][r[y]]);
}
}
BZOJ1774[USACO 2009 Dec Gold 2.Cow Toll Paths]——floyd的更多相关文章
- BZOJ1775[USACO 2009 Dec Gold 3.Video Game Troubles]——DP
题目描述 输入 * 第1行: 两个由空格隔开的整数: N和V * 第2到第N+1行: 第i+1行表示第i种游戏平台的价格和可以在这种游戏平台上面运行的游 戏.包含: P_i, G_i还有G_i对由空格 ...
- [USACO 2017 Dec Gold] Tutorial
Link: USACO 2017 Dec Gold 传送门 A: 为了保证复杂度明显是从终结点往回退 结果一开始全在想优化建边$dfs$……其实可以不用建边直接$multiset$找可行边跑$bfs$ ...
- NC24866 [USACO 2009 Dec S]Music Notes
NC24866 [USACO 2009 Dec S]Music Notes 题目 题目描述 FJ is going to teach his cows how to play a song. The ...
- P2966 [USACO09DEC]牛收费路径Cow Toll Paths
P2966 [USACO09DEC]牛收费路径Cow Toll Paths 题目描述 Like everyone else, FJ is always thinking up ways to incr ...
- P2966 [USACO09DEC]Cow Toll Paths G
题意描述 Cow Toll Paths G 这道题翻译的是真的不错,特别是第一句话 给定一张有 \(n\) 个点 \(m\) 条边的无向图,每条边有边权,每个点有点权. 两点之间的路径长度为所有边权 ...
- usaco 过路费 Cow Toll Paths, 2009 Dec
Description 翰家有 N 片草地,编号为 1 到 N ,彼此之间由 M 条双向道路连接,第 i 条道路连接了 Ai 和Bi,两片草地之间可能有多条道路,但没有道路会连接同一片草地,现有的道路 ...
- USACO 2009 Dec cow toll paths 过路费-floyd
这道题首先要明确一点,那就是当你从一个点走到自己时,也是需要花费这个点点权值的费用.这个点卡了我两次QWQ 然后我比较喜欢分两步搞: 首先,我们利用floyd的一个性质:就是在更新其他点之间的路线时要 ...
- [USACO 2011 Dec Gold] Cow Calisthenics【二分】
Problem 1: Cow Calisthenics [Michael Cohen, 2010] Farmer John continues his never-ending quest to ke ...
- [USACO 2009 Feb Gold] Fair Shuttle (贪心+优先队列)
题目大意:有N个站点的轻轨站,有一个容量为C的列车起点在1号站点,终点在N号站点,有K组牛群,每组数量为Mi(1≤Mi≤N),行程起点和终点分别为Si和Ei(1≤Si<Ei≤N).计算最多有多少 ...
随机推荐
- [TPYBoard - Micropython之会python就能做硬件 开篇]会python就能做硬件!
转载请注明:@小五义http://www.cnblogs.com/xiaowuyiQQ群:64770604 会python就能做硬件! 在写这套教程之前,首先感觉山东萝卜电子科技有限公司(turnip ...
- python条件、循环语句
既然讲到语句,那先说明一下语句块.语句块不是一种语句,是一组语句.在条件为真时执行或者多次的一组语句.主要注意其格式,用冒号来标识语句块的开始,块中每行缩进相同的量,一般4个空格(tab字符位置为8个 ...
- VSCode Install Go
首先是VScode官网下载:https://code.visualstudio.com/ 然后在电脑上安装go的环境 如下图在VSCode上搜go的插件进行安装: 推荐:vscode-icons这个插 ...
- CYJian的水题大赛
实在没忍住就去打比赛了然后一耗就是一天 最后Rank19还是挺好的(要不是乐多赛不然炸飞),这是唯一一套在Luogu上号称水题大赛的而实际上真的是水题大赛的比赛 好了我们开始看题 T1 八百标兵奔北坡 ...
- [Oracle]包含了MVIEW的表领域,在进行导出,表领域改名,再导入后,MVIEW会消失不见。
包含了MVIEW的表领域,在进行导出,表领域改名,再导入后,MVIEW会消失不见. 测试环境12.1.0.2 =================步骤1:数据的准备 [oracle@db12102 ad ...
- Caffe源码中caffe.proto文件分析
Caffe源码(caffe version:09868ac , date: 2015.08.15)中有一些重要文件,这里介绍下caffe.proto文件. 在src/caffe/proto目录下有一个 ...
- HNOI2019 鱼 fish
本来想写个改题记录的然后想了想改不完所以就分开写了= = https://www.luogu.org/problemnew/show/P5286 显然枚举A,D,然后鱼头和鱼身分开来考虑. 鱼身:先枚 ...
- 开发CMDB系统
背景: 在现网环境中服务器多了每天服务器的配置 情况我们很难记住,当某台服务器硬件配置变化后可以第一时间了解,某台服务器出现问题时可以快速定位机架位置,之前都是excel文档,要查某项数据时极不方便. ...
- 基于bootstrap表单登录(带验证码)
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <!-- ...
- doc窗口 输入命令net start mysql 服务名无效
解决方案: 1.win+R键输入cmd敲回车进入dos界面: 2.输入cd d:/mysql-5.5.25/bin敲回车,发现没变化: 3.输入d:敲回车,定位到d:\mysql-5.5.25\bin ...