Description

跟所有人一样,农夫约翰以着宁教我负天下牛,休叫天下牛负我的伟大精神,日日夜夜苦思生财之道。为了发财,他设置了一系列的规章制度,使得任何一只奶牛在农场中的道路行走,都要向农夫约翰上交过路费。
  农场中由N(1 <= N <= 250)片草地(标号为1到N),并且有M(1 <= M <= 10000)条双向道路连接草地A_j和B_j(1 <= A_j <= N; 1 <= B_j <= N)。奶牛们从任意一片草地出发可以抵达任意一片的草地。FJ已经在连接A_j和B_j的双向道路上设置一个过路费L_j(1 <= L_j <= 100,000)。
  可能有多条道路连接相同的两片草地,但是不存在一条道路连接一片草地和这片草地本身。最值得庆幸的是,奶牛从任意一篇草地出发,经过一系列的路径,总是可以抵达其它的任意一片草地。
  除了贪得无厌,叫兽都不知道该说什么好。FJ竟然在每片草地上面也设置了一个过路费C_i(1 <= C_i <= 100000)。从一片草地到另外一片草地的费用,是经过的所有道路的过路费之和,加上经过的所有的草地(包括起点和终点)的过路费的最大值。
任劳任怨的牛们希望去调查一下她们应该选择那一条路径。她们要你写一个程序,接受K(1<= K <= 10,000)个问题并且输出每个询问对应的最小花费。第i个问题包含两个数字s_i和t_i(1 <= s_i <= N; 1 <= t_i <= N; s_i != t_i),表示起点和终点的草地。
  考虑下面这个包含5片草地的样例图像:
  
 从草地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。

Solution

这道题,其实very water。
经过思考,其实我们可以有一个大致的思路:
对于每一个询问,我们枚举一个中间点,使得这个中间点是连接这一个询问的两个点的路径中点过路费最大的,答案就是最小的路径长度。
我们考虑对每一个点进行最短路,并且强制认为这个点是最大的,所以,其他点如果“点过路费”比它大,就不走。
最后统计答案时,就枚举中间点即可。至于重边的情况其实不用判断,因为我在枚举时总会有一个点没有重边。

Code

#include<cstdio>
#include<cstring>
using namespace std;
const int INF=0x7f7f7f7f;
int n,m,q,cnt,ans;
int a[255],head[255],d[1000],dis[255][255];
bool vis[255];
struct node {int to,len,next;
}edge[200005];
inline int read() {int s=0;char ch=getchar();while(ch<48||ch>57)ch=getchar();while(ch>=48&&ch<=57)s=(s<<1)+(s<<3)+(ch^48),ch=getchar();return s;
}
inline void add(int x,int y,int z) {edge[cnt]=(node){y,z,head[x]};head[x]=cnt++;
}
inline void spfa(int x) {for(int i=1;i<=n;++i)dis[x][i]=INF;dis[x][x]=0;int h=0,t=1;d[1]=x;vis[x]=1;while(h<t) {int now=d[++h];for(int i=head[now];i!=-1;i=edge[i].next) {int to=edge[i].to,len=edge[i].len;if(a[to]>a[x])continue;if(dis[x][now]+len<dis[x][to]) {dis[x][to]=dis[x][now]+len;if(!vis[to]) {vis[to]=1;d[++t]=to;}}}vis[now]=0;}
}
int main() {freopen("toll.in","r",stdin);freopen("toll.out","w",stdout);n=read();m=read();q=read();for(int i=1;i<=n;++i)a[i]=read();memset(head,-1,sizeof(head));while(m--) {int u=read(),v=read(),w=read();add(u,v,w);add(v,u,w);}for(int i=1;i<=n;++i)spfa(i);while(q--) {ans=INF;int u=read(),v=read();for(int i=1;i<=n;++i)if(a[i]>=a[u]&&a[i]>=a[v]&&dis[i][u]!=INF&&dis[i][v]!=INF&&dis[i][u]+dis[i][v]+a[i]<ans)ans=dis[i][u]+dis[i][v]+a[i];printf("%d\n",ans);}fclose(stdin);fclose(stdout);return 0;
}

【Usaco2009 gold 】过路费相关推荐

  1. [Usaco2009 Dec] 过路费

    [题目链接] https://www.luogu.org/problemnew/show/P2966 [算法] SPFA最短路 时间复杂度 : O(N ^ 2) [代码] #include<bi ...

  2. 1578: [Usaco2009 Feb]Stock Market 股票市场

    1578: [Usaco2009 Feb]Stock Market 股票市场 Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 414  Solved:  ...

  3. 3409: [Usaco2009 Oct]Barn Echoes 牛棚回声

    3409: [Usaco2009 Oct]Barn Echoes 牛棚回声 Time Limit: 3 Sec  Memory Limit: 128 MB Submit: 57  Solved: 47 ...

  4. 1574: [Usaco2009 Jan]地震损坏Damage

    1574: [Usaco2009 Jan]地震损坏Damage Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 425  Solved: 232 [Su ...

  5. bzoj1770: [Usaco2009 Nov]lights 燈(折半搜索)

    1770: [Usaco2009 Nov]lights 燈 Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 1153  Solved: 564 [Sub ...

  6. 1583: [Usaco2009 Mar]Moon Mooing 哞哞叫

    1583: [Usaco2009 Mar]Moon Mooing 哞哞叫 Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 244  Solved: 12 ...

  7. [bzoj1582][Usaco2009 Hol]Holiday Painting 节日画画_线段树

    Holiday Painting 节日画画 bzoj-1582 Usaco-2009 Hol 题目大意:给定两个n*m的01网格图.q次操作,每次将第二个网格图的子矩阵全部变成0或1,问每一次操作后两 ...

  8. [BZOJ1572][Usaco2009 Open]工作安排Job

    1572: [Usaco2009 Open]工作安排Job Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 1351  Solved: 632 [Sub ...

  9. Gold Code,Gold Sequence

    Gold Code Gold Code是以Robert Gold的名字命名的.它是一组特殊的二进制随机(伪随机)序列,其中成员序列之间的相关性很小.由于这种特性(较小的相关性),它被广泛地用作各种无线 ...

最新文章

  1. Python小知识点(3)--装饰器
  2. 【Spring框架家族】Spring--Security权限控制密码加密
  3. WP7应用《OOK随心系列》字体和电子书上传方法说明
  4. Linux疑难杂症解决方案100篇(五)-SHELL脚本中case语句的多种使用场景
  5. 聊聊我对黑客技术的思考
  6. Android消息向下堆积,android - 从CoordinatorLayout中的按钮单击事件触发NestedScroll折叠动作 - 堆栈内存溢出...
  7. 毕业作文计算机系统与维护,修电脑作文600字
  8. git 从远程git服务上拉代码 git服务器非默认端口
  9. 正则表达式匹配连续相同字符
  10. Linux安装PHP环境LNMP
  11. 直接通过服务器文件相对路径实现文件下载
  12. abaqus与python后处理_abaqus用Python批量后处理教程!如何从abaqus导出python
  13. 电脑开启热点手机显示不可上网
  14. JAVA JNI中int和Integer完全不同
  15. 八皇后——(第一场 递归与回溯)
  16. Android中DNS域名劫持问题-解决方案
  17. 6sigma is a good issue improved
  18. 3步释放工作和生活压力
  19. 懂得放弃才有快乐,背着包袱走路总是很辛苦。
  20. C语言实现贪吃蛇(easyx)

热门文章

  1. 象棋中马走日字,给定棋盘上两个点,求两点间马最少走几步可达
  2. ShardingSphere分库分表
  3. V神:去中心化社会:寻找Web3的灵魂
  4. cmd运行jar架包
  5. php 高级留言板,PHP留言板(范例)
  6. html5触屏滑动事件,HTML5的touch事件详解
  7. 系统管理员限制了系统策略,无法安装 解决办法
  8. Python 期中考模拟题(编程题部分)
  9. 如何找回IOS访问限制密码
  10. Spring Security OAuth2 入门,linux操作系统学习