未经同意,不得转载。

The good folks in Texas are having a heatwave this summer. Their Texas Longhorn cows make for good eating but are not so adept at creating creamy delicious dairy products. Farmer John is leading the charge to deliver plenty of ice cold nutritious milk to Texas so the Texans will not suffer the heat too much.

FJ has studied the routes that can be used to move milk from Wisconsin to Texas. These routes have a total of T (1 <= T <= 2,500) towns conveniently numbered 1..T along the way (including the starting and ending towns). Each town (except the source and destination towns) is connected to at least two other towns by bidirectional roads that have some cost of traversal (owing to gasoline consumption, tolls, etc.). Consider this map of seven towns; town 5 is the

source of the milk and town 4 is its destination (bracketed integers represent costs to traverse the route):

[1]----1---[3]-/               \[3]---6---[4]---3--[3]--4 / / /| 5 --[3]-- --[2]- | \ / / | [5]---7---[2]--2---[3]--- | / [1]------

Traversing 5-6-3-4 requires spending 3 (5->6) + 4 (6->3) + 3 (3->4) = 10 total expenses.

Given a map of all the C (1 <= C <= 6,200) connections (described as two endpoints R1i and R2i (1 <= R1i <= T; 1 <= R2i <= T) and costs (1 <= Ci <= 1,000), find the smallest total expense to traverse from the starting town Ts (1 <= Ts <= T) to the destination town Te (1 <= Te <= T).

德克萨斯纯朴的民眾们这个夏天正在遭受巨大的热浪!!!他们的德克萨斯长角牛吃起来不错,可是他们并不是很擅长生產富含奶油的乳製品。Farmer John此时以先天下之忧而忧,后天下之乐而乐的精神,身先士卒地承担起向德克萨斯运送大量的营养冰凉的牛奶的重任,以减轻德克萨斯人忍受酷暑的痛苦。

FJ已经研究过可以把牛奶从威斯康星运送到德克萨斯州的路线。这些路线包括起始点和终点先一共经过T (1 <= T <= 2,500)个城镇,方便地标号為1到T。除了起点和终点外地每个城镇由两条双向道路连向至少两个其它地城镇。每条道路有一个通过费用(包括油费,过路费等等)。

给定一个地图,包含C (1 <= C <= 6,200)条直接连接2个城镇的道路。每条道路由道路的起点Rs,终点Re (1 <= Rs <= T; 1 <= Re <= T),和花费(1 <= Ci <= 1,000)组成。求从起始的城镇Ts (1 <= Ts <= T)到终点的城镇Te(1 <= Te <= T)最小的总费用。

输入输出格式

输入格式:

第一行: 4个由空格隔开的整数: T, C, Ts, Te

第2到第C+1行: 第i+1行描述第i条道路。有3个由空格隔开的整数: Rs, Re和Ci

输出格式:

一个单独的整数表示从Ts到Te的最小总费用。数据保证至少存在一条道路。

输入输出样例

输入样例#1:

7 11 5 4
2 4 2
1 4 3
7 2 2
3 4 3
5 7 5
7 3 3
6 1 1
6 3 4
2 4 3
5 6 3
7 2 1

输出样例#1:

7

说明

【样例说明】

5->6->1->4 (3 + 1 + 3)

--------------------------------------------------------------------------------------------------------------------------------------------------------

解法:

一:

裸的迪克斯特拉:

#include<iostream>
#include<cstdio>
using namespace std;
int dist[2545],w[2545][2545],s[2545],maxn=999999;
int main()
{int n,m,a,b,x,y,z;cin>>n>>m>>a>>b;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)w[i][j]=maxn;for(int i=1; i<=m; i++){scanf("%d%d%d",&x,&y,&z);w[x][y]=z;w[y][x]=z;}for(int i=1;i<=n;i++)dist[i]=w[a][i];dist[a]=0;s[a]=1;for(int i=1;i<=n;i++){int minx=maxn,u;for(int j=1;j<=n;j++)if(s[j]==0&&dist[j]<minx){minx=dist[j];u=j;}s[u]=1;if(minx==maxn)continue;for(int j=1;j<=n;j++)if(s[j]==0&&dist[j]>minx+w[u][j])dist[j]=minx+w[u][j];}cout<<dist[b];return 0;
}

二:

堆优化的迪克斯特拉(邻接链)

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int read()
{int x=0,y=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')y=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*y;
}
struct edge
{int next,to,len;
} e[10045];
int head[10045],cnt,t[10045],headd,tail=1,vis[10045],dist[10045];
void add(int from,int to,int l)
{e[++cnt].len=l;e[cnt].next=head[from];e[cnt].to=to;head[from]=cnt;
}
int main()
{memset(head,-1,sizeof(head));memset(dist,127/3,sizeof(dist));int n=read(),m=read(),a=read(),b=read(),x,y,z;for(int i=1; i<=m; i++){x=read(),y=read(),z=read();add(x,y,z);add(y,x,z);}dist[a]=0;t[headd]=a;vis[a]=1;while(headd!=tail){int r=head[t[headd]];vis[t[headd++]]=0;while(r!=-1){
//            printf("r=%d t[headd-1]=%d e[r].to=%d\n",r,t[headd-1],e[r].to);if(dist[e[r].to]>dist[t[headd-1]]+e[r].len){dist[e[r].to]=dist[t[headd-1]]+e[r].len;if(!vis[e[r].to]){t[tail++]=e[r].to;vis[e[r].to]=1;}}r=e[r].next;}}cout<<dist[b];return 0;
}

三:

SPFA

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int read()
{int x=0,y=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')y=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*y;
}
struct edge
{int next,to,len;
} e[50045];
int head[10045],cnt,t[10045],headd,tail=1,vis[10045],dist[10045];
void add(int from,int to,int l)
{e[++cnt].len=l;e[cnt].next=head[from];e[cnt].to=to;head[from]=cnt;
}
int main()
{memset(head,-1,sizeof(head));memset(dist,127/3,sizeof(dist));int n=read(),m=read(),a=read(),b=read(),x,y,z;for(int i=1; i<=m; i++){x=read(),y=read(),z=read();add(x,y,z);add(y,x,z);}dist[a]=0;t[headd]=a;vis[a]=1;while(headd!=tail){int r=head[t[headd]];vis[t[headd++]]=0;while(r!=-1){
//            printf("r=%d t[headd-1]=%d e[r].to=%d\n",r,t[headd-1],e[r].to);if(dist[e[r].to]>dist[t[headd-1]]+e[r].len){dist[e[r].to]=dist[t[headd-1]]+e[r].len;if(!vis[e[r].to]){t[tail++]=e[r].to;vis[e[r].to]=1;}}r=e[r].next;}}cout<<dist[b];return 0;
}

转载于:https://www.cnblogs.com/gshdyjz/p/7020257.html

[USACO09OCT]热浪Heat Wave相关推荐

  1. P1339 [USACO09OCT]热浪Heat Wave(最短路水题)

    题目描述 The good folks in Texas are having a heatwave this summer. Their Texas Longhorn cows make for g ...

  2. 题解- [USACO09OCT]热浪Heat Wave

    题目描述 The good folks in Texas are having a heatwave this summer. Their Texas Longhorn cows make for g ...

  3. P1339 [USACO09OCT]热浪Heat Wave(SPFA)

    -------------------------------------- 农夫约翰再显神威,双向热浪,双倍数组 (双倍大小,否则RE) ------------------------------ ...

  4. 【洛谷1339 [USACO09OCT]】热浪Heat Wave 图论+最短路

    AC代码 #include<bits/stdc++.h> using namespace std; const int MAXN=62000+10,INF=999999; struct E ...

  5. 信息学奥赛一本通 1379:热浪(heatwv) | 洛谷 P1339 [USACO09OCT]Heat Wave G

    [题目链接] ybt 1379:热浪(heatwv) 洛谷 P1339 [USACO09OCT]Heat Wave G [题目考点] 1. 图论:最短路径 [解题思路] 首先抽象建模.城镇为顶点,道路 ...

  6. bzoj 3386 bzoj 3408: [Usaco2009 Oct]Heat Wave 热浪(最短路)

    3408: [Usaco2009 Oct]Heat Wave 热浪 Time Limit: 3 Sec  Memory Limit: 128 MB Submit: 301  Solved: 223 [ ...

  7. [Usaco2009 Oct]Heat Wave 热浪

    题目描述 有一个 n个点 m 条边的无向图,请求出从 s 到 t 的最短路长度. 输入格式第一行四个正整数 n, m, s, t. 接下来 m 行,每行三个正整数 u, v, w,表示一条连接 u, ...

  8. P1339 [USACO09OCT] Heat Wave G

    做这道题之前,可以做做这道题洛谷 P3371 [模板]单源最短路径(弱化版) 这两道题其实没有多大的区别,就是一个是有向图,另一个是无向图 我用的算法是dijkstra,大家可以上网学习,在这里不做过 ...

  9. 洛谷P1339 Heat Wave G(最短路,图论)

    [题目描述] 有一个n个点m条边的无向图,请求出从s到t的最短路长度. [输入格式] 第一行四个正整数n,m,s,t.接下来m行,每行三个正整数u,v,w,表示一条连接u,v长为w的边. [输出格式] ...

最新文章

  1. 企业信息化所面临的问题
  2. macappstore登不上去_荣耀亲选一度登机箱----一个安静得想放进大侄子的magic box
  3. 【中级软考】结构化开发方法是啥,主要包含哪些内容?
  4. C语言学习之猴子吃桃问题。猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第2天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。
  5. 搞技术多少要有点危机意识,切不可温水煮青蛙
  6. static关键字(修饰函数、局部变量、全局变量)
  7. 关于linux kernel编译的几项关键点:
  8. web.py 十分钟创建简易博客
  9. Js中String对象
  10. hj212协议如何和php通讯,5G/4G边缘计算网关如何实现HJ212协议上报
  11. Mac安装jadx查看dex文件
  12. 函数自执行-一元运算符
  13. SDK Manager配置
  14. 什么叫断章取义,什么叫曲解——你被骗了多少年?
  15. WPF 逻辑树和可视化树
  16. sql数据库包含关系查询
  17. 【研一小白论文精读】《Big Self-Supervised Models are Strong Semi-Supervised Learners》
  18. USB设备导致xp系统蓝屏
  19. 新媒体推广之今日头条
  20. 单片机最小系统实现LED灯闪烁

热门文章

  1. 区域风云企业之大立-DVR产品的新技术应用
  2. /etc/securetty文件
  3. Java 7 对ArrayList和HashMap的性能的提升
  4. HRBUST 1473 教主的遗产【状态压缩】
  5. C# 操作符重载 模拟String
  6. 基于WF4的新平台-流程模式-(6)动态串行
  7. 在Exchange Server 2007中限制部分用户只能收发内部邮件
  8. python运行方法_对python中执行DOS命令的3种方法总结
  9. useradd: cannot open /etc/passwd解决办法记录
  10. 统计twitter帖子_在Kubernetes上部署InfluxDB和Grafana以收集Twitter统计信息