bzoj 1774: [Usaco2009 Dec]Toll 过路费【排序+Floyd】
非常迷的一道题啊
我觉得挺对的版本只得了30
总之就是Floyd·改,开两个数组,一个是d[i][j]就是普通的只有边权的最短路,a[i][j]是题目要求的那种
具体改的地方是把枚举中转点的地方把中转点按从小到大的顺序枚举,d[i][j]按照套路更新即可,然后a[i][j]从a[i][j]原数和d[i][j]+max(c[i],c[j],c[中转点])中取min
证明的话是最短路不一定是最终答案,能更新这个答案的一定是最大点更小一些的另一条路,所以按点权顺序更新能保证把这种情况全部更新
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=255,inf=1e9+7;
int n,m,q,a[N][N],d[N][N],v[N];
struct qwe
{
int p,v;
}c[N];
bool cmp(const qwe &x,const qwe &y)
{
return x.v<y.v;
}
int read()
{
int r=0,f=1;
char p=getchar();
while(p>'9'||p<'0')
{
if(p=='-')
f=-1;
p=getchar();
}
while(p>='0'&&p<='9')
{
r=r*10+p-48;
p=getchar();
}
return r*f;
}
int main()
{
n=read(),m=read(),q=read();
for(int i=1;i<=n;i++)
v[i]=d[i][i]=a[i][i]=c[i].v=read(),c[i].p=i;
sort(c+1,c+1+n,cmp);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(i!=j)
a[i][j]=d[i][j]=inf;
for(int i=1;i<=m;i++)
{
int x=read(),y=read(),z=read();
d[x][y]=d[y][x]=min(d[x][y],z);
}
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
d[i][j]=min(d[i][j],d[i][c[k].p]+d[c[k].p][j]),a[i][j]=min(a[i][j],d[i][j]+max(max(v[i],v[j]),c[k].v));
while(q--)
{
int x=read(),y=read();
printf("%d\n",a[x][y]);
}
return 0;
}
我觉得挺对的版本:
#include<iostream>
#include<cstdio>
using namespace std;
const int N=255,inf=1e9+7;
int n,m,q,a[N][N],c[N],mx[N][N];
int read()
{
int r=0,f=1;
char p=getchar();
while(p>'9'||p<'0')
{
if(p=='-')
f=-1;
p=getchar();
}
while(p>='0'&&p<='9')
{
r=r*10+p-48;
p=getchar();
}
return r*f;
}
int main()
{
n=read(),m=read(),q=read();
for(int i=1;i<=n;i++)
c[i]=read(),mx[i][i]=a[i][i]=c[i];
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(i!=j)
a[i][j]=mx[i][j]=inf;
for(int i=1;i<=m;i++)
{
int x=read(),y=read(),z=read();
if(a[x][y]>z+max(c[x],c[y]))
a[x][y]=a[y][x]=z+max(c[x],c[y]),mx[x][y]=mx[y][x]=max(c[x],c[y]);
}
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(a[i][j]>a[i][k]-mx[i][k]+a[k][j]-mx[k][j]+max(mx[i][k],mx[k][j]))
a[i][j]=a[i][k]-mx[i][k]+a[k][j]-mx[k][j]+max(mx[i][k],mx[k][j]),mx[i][j]=max(mx[i][k],mx[k][j]);
while(q--)
{
int x=read(),y=read();
printf("%d\n",a[x][y]);
}
return 0;
}
bzoj 1774: [Usaco2009 Dec]Toll 过路费【排序+Floyd】的更多相关文章
- bzoj 1774: [Usaco2009 Dec]Toll 过路费 ——(改)floyd
Description 跟所有人一样,农夫约翰以着宁教我负天下牛,休叫天下牛负我的伟大精神,日日夜夜苦思生 财之道.为了发财,他设置了一系列的规章制度,使得任何一只奶牛在农场中的道路行走,都 要向农夫 ...
- [bzoj 1774][Usaco2009 Dec]Toll 过路费
题目描述 跟所有人一样,农夫约翰以着宁教我负天下牛,休叫天下牛负我的伟大精神,日日夜夜苦思生 财之道.为了发财,他设置了一系列的规章制度,使得任何一只奶牛在农场中的道路行走,都 要向农夫约翰上交过路费 ...
- 1774: [Usaco2009 Dec]Toll 过路费
1774: [Usaco2009 Dec]Toll 过路费 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 263 Solved: 154[Submit ...
- 【BZOJ】1774: [Usaco2009 Dec]Toll 过路费
[题意]给定无向图,距离定义为边权和+最大点权,询问若干个两点最短距离.n<=250. [算法]排序+floyd [题解]考虑floyd的过程是每次找一个中转点,为了在当前找到一条新路径时方便地 ...
- BZOJ_1774_[Usaco2009 Dec]Toll 过路费_floyd
BZOJ_1774_[Usaco2009 Dec]Toll 过路费_floyd 题意: 跟所有人一样,农夫约翰以着宁教我负天下牛,休叫天下牛负我的伟大精神,日日夜夜苦思生 财之道.为了发财,他设置了一 ...
- Floyd | | jzoj[1218] | | [Usaco2009 Dec]Toll 过路费 | | BZOJ 1774 | | 我也不知道该怎么写
写在前面:老师说这一道题是神题,事实上确实如此,主要是考察对Floyd的理解 ******************************题目.txt************************* ...
- [Usaco2009 Dec]Toll 过路费
题面: 跟所有人一样,农夫约翰以着宁教我负天下牛,休教天下牛负我(原文:宁我负人,休教人负我)的伟大精神,日日夜夜苦思生财之道.为了发财,他设置了一系列的规章制度,使得任何一只奶牛在农场中的道路行走, ...
- [bzoj1774] [Usaco2009 Dec]Toll 过路费
Floyd神用法...设dis[i][j]表示i点到j点的最短路(只算边权),map[i][j]表示i到j最小费用 将n个点先按照点权排一下序...这样就可以比较方便的求出路径上最大点权了... 因为 ...
- BZOJ 3412: [Usaco2009 Dec]Music Notes乐谱(离线处理)
这道题貌似怎么写都可以吧= =,我先读入询问然后从小到大处理就行了= = PS:水水题真的好!无!聊!但是好!欢!乐! CODE: #include<cstdio>#include< ...
随机推荐
- 数据库SQL实战练习
http://blog.csdn.net/iamyvette/article/details/77151925
- xtu summer individual 6 D - Checkposts
Checkposts Time Limit: 2000ms Memory Limit: 262144KB This problem will be judged on CodeForces. Orig ...
- HDU 1016 素数环问题
题目大意: 给定1-n这n个数,组成以1开头的素数环,保证相邻两个数相加均为素数 题目用dfs搜索再回溯,这样碰到不成立的立刻退出递归,就减少了很多步骤,不然暴力来就是n!次复杂度,肯定是超时的 每次 ...
- 解决Codeforces访问慢的本地方案
参考: http://m.blog.csdn.net/blog/Xiangamp/42245923#
- HDU 3664 (水地推)
http://acm.hdu.edu.cn/showproblem.php?pid=3664 题意:给出数字n,问n的所有的排列中满足Ai>i 数字恰好为 k的排列的个数. sl : dp dp ...
- SharedPreferences保存用户偏好参数
package com.example.administrator.myapplication; import android.content.Context; import android.cont ...
- JVM 总结
面试 java 虚拟机 jvm 基础 jvm Write Once Run EveryWhere >jar 包可以在任何兼容jvm上运行 >jvm 适配器 屏蔽掉底层差异 >内存管理 ...
- 在windows下安装Django
2013-07-24 21:23:30| 1.安装Python 我安装的是Python(x,y)-2.7.5.0,安装目录在C盘.安装成功后如下图所示. 2.安装Django 从https://w ...
- UVALive7042(博弈论)
题意: Bob和Alice在有向图内玩游戏,n个顶点,m条边. 每人一颗棋子,初始位置分别是x,y. Bob先手,轮流操作,每次只能走一条有向边. 结束条件: 1.不能操作的人输 2.两个棋子重合Bo ...
- HAProxy+Redis实现负载负载均衡(待实践)
为什么要使用HA,原因是可以聚合出一个VIP,也就是可以使用单一IP来访问下面多个Redis的实例. 首先说明一下,如果基于3.0以后搭建的官方原始Redis Cluster方案,使用HAProxy是 ...