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).计算最多有多少 ...
随机推荐
- Excel 2007 底层实现方式
一.EXCEL的底层实现 能力有限,了解的比较浅,有不足之处望指正,首先看下图: 一. excel2007是使用xml格式来存储的,把一个excel文件后缀改为.zip,打开之后就直接可以看到一个ex ...
- Luogu3175 HAOI2015 按位或 min-max容斥、高维前缀和、期望
传送门 套路题 看到\(n \leq 20\),又看到我们求的是最后出现的位置出现的时间的期望,也就是集合中最大值的期望,考虑min-max容斥. 由\(E(max(S)) = \sum\limits ...
- 微软下一代Web前端技术Blazor(C#编译为WebAssembly)
W3C Web标准化机构在制定下一代的网页技术WebAssembly.目前版本是1.0,主流浏览器的最新版本都已经支持.其特点是浏览器可以执行编译后的二进制程序,不需要像之前的程序,浏览器下载Java ...
- C#基础巩固(1)-多态+简单工厂
多态 如果要简要的描述多态的话,我个人是这样理解的:通过继承,父类定义方法,具休的实现由子类进行. 01代码 //父类 class Person { public virtual void skill ...
- .NET小笔记-NPOI读取excel内容到DataTable
下载比较新的NPOI组件支持excel2007以上的,把.dll添加引用 引入命名空间 using NPOI.HSSF.UserModel;using NPOI.SS.UserModel;using ...
- 2019 The 19th Zhejiang University Programming Contest
感想: 今天三个人的状态比昨天计院校赛的状态要好很多,然而三个人都慢热体质导致签到题wa了很多发.最后虽然跟大家题数一样(6题),然而输在罚时. 只能说,水题还是刷得少,看到签到都没灵感实在不应该. ...
- vue + element 实现登录注册(自定义表单验证规则)
注册页包含手机验证码登录和密码的二次验证. 效果如下: 实现代码: <template> <div> <div class="register-wrapper& ...
- BTrace 初探
BTrace 是一款java诊断工具,在解决现场问题的时候非常有用. 今天使用的时候碰到几个坑,先记录一下. 下载下来以后直接运行报错 root@iZ2ze89756yjbvq7le6obdZ:~/b ...
- 基于Ping和Telnet/NC的监控脚本案例分析
案例一:单纯地对某些ip进行ping监控 [root@test opt]# cat /opt/hosts_ip_list 192.168.10.10 192.168.10.11 192.168.10. ...
- 分布式监控系统Zabbix-批量添加聚合图形
之前部署了Zabbix(3.4.4版本)监控环境,由于主机比较多,分的主机组也比较多,添加聚合图形比较麻烦,故采用python脚本进行批量添加聚合图形.脚本下载地址:https://pan.baidu ...