未经同意,不得转载。

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]----1---[3]-
  2. / \
  3. [3]---6---[4]---3--[3]--4
  4. / / /|
  5. 5 --[3]-- --[2]- |
  6. \ / / |
  7. [5]---7---[2]--2---[3]---
  8. | /
  9. [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:

  1. 7 11 5 4
  2. 2 4 2
  3. 1 4 3
  4. 7 2 2
  5. 3 4 3
  6. 5 7 5
  7. 7 3 3
  8. 6 1 1
  9. 6 3 4
  10. 2 4 3
  11. 5 6 3
  12. 7 2 1
输出样例#1:

  1. 7

说明

【样例说明】

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

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

解法:

一:

裸的迪克斯特拉:

  1. #include<iostream>
  2. #include<cstdio>
  3. using namespace std;
  4. int dist[],w[][],s[],maxn=;
  5. int main()
  6. {
  7. int n,m,a,b,x,y,z;
  8. cin>>n>>m>>a>>b;
  9. for(int i=;i<=n;i++)
  10. for(int j=;j<=n;j++)
  11. w[i][j]=maxn;
  12. for(int i=; i<=m; i++)
  13. {
  14. scanf("%d%d%d",&x,&y,&z);
  15. w[x][y]=z;
  16. w[y][x]=z;
  17. }
  18. for(int i=;i<=n;i++)
  19. dist[i]=w[a][i];
  20. dist[a]=;
  21. s[a]=;
  22. for(int i=;i<=n;i++)
  23. {
  24. int minx=maxn,u;
  25. for(int j=;j<=n;j++)
  26. if(s[j]==&&dist[j]<minx)
  27. {
  28. minx=dist[j];
  29. u=j;
  30. }
  31. s[u]=;
  32. if(minx==maxn)
  33. continue;
  34. for(int j=;j<=n;j++)
  35. if(s[j]==&&dist[j]>minx+w[u][j])
  36. dist[j]=minx+w[u][j];
  37. }
  38. cout<<dist[b];
  39. return ;
  40. }

二:

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

  1. #include<iostream>
  2. #include<cstring>
  3. #include<cstdio>
  4. using namespace std;
  5. int read()
  6. {
  7. int x=,y=;
  8. char ch=getchar();
  9. while(ch<''||ch>'')
  10. {
  11. if(ch=='-')
  12. y=-;
  13. ch=getchar();
  14. }
  15. while(ch>=''&&ch<='')
  16. {
  17. x=x*+ch-'';
  18. ch=getchar();
  19. }
  20. return x*y;
  21. }
  22. struct edge
  23. {
  24. int next,to,len;
  25. } e[];
  26. int head[],cnt,t[],headd,tail=,vis[],dist[];
  27. void add(int from,int to,int l)
  28. {
  29. e[++cnt].len=l;
  30. e[cnt].next=head[from];
  31. e[cnt].to=to;
  32. head[from]=cnt;
  33. }
  34. int main()
  35. {
  36. memset(head,-,sizeof(head));
  37. memset(dist,/,sizeof(dist));
  38. int n=read(),m=read(),a=read(),b=read(),x,y,z;
  39. for(int i=; i<=m; i++)
  40. {
  41. x=read(),y=read(),z=read();
  42. add(x,y,z);
  43. add(y,x,z);
  44. }
  45. dist[a]=;
  46. t[headd]=a;
  47. vis[a]=;
  48. while(headd!=tail)
  49. {
  50. int r=head[t[headd]];
  51. vis[t[headd++]]=;
  52. while(r!=-)
  53. {
  54. // printf("r=%d t[headd-1]=%d e[r].to=%d\n",r,t[headd-1],e[r].to);
  55. if(dist[e[r].to]>dist[t[headd-]]+e[r].len)
  56. {
  57. dist[e[r].to]=dist[t[headd-]]+e[r].len;
  58. if(!vis[e[r].to])
  59. {
  60. t[tail++]=e[r].to;
  61. vis[e[r].to]=;
  62. }
  63. }
  64. r=e[r].next;
  65. }
  66. }
  67. cout<<dist[b];
  68. return ;
  69. }

三:

SPFA

  1. #include<iostream>
  2. #include<cstring>
  3. #include<cstdio>
  4. using namespace std;
  5. int read()
  6. {
  7. int x=,y=;
  8. char ch=getchar();
  9. while(ch<''||ch>'')
  10. {
  11. if(ch=='-')
  12. y=-;
  13. ch=getchar();
  14. }
  15. while(ch>=''&&ch<='')
  16. {
  17. x=x*+ch-'';
  18. ch=getchar();
  19. }
  20. return x*y;
  21. }
  22. struct edge
  23. {
  24. int next,to,len;
  25. } e[];
  26. int head[],cnt,t[],headd,tail=,vis[],dist[];
  27. void add(int from,int to,int l)
  28. {
  29. e[++cnt].len=l;
  30. e[cnt].next=head[from];
  31. e[cnt].to=to;
  32. head[from]=cnt;
  33. }
  34. int main()
  35. {
  36. memset(head,-,sizeof(head));
  37. memset(dist,/,sizeof(dist));
  38. int n=read(),m=read(),a=read(),b=read(),x,y,z;
  39. for(int i=; i<=m; i++)
  40. {
  41. x=read(),y=read(),z=read();
  42. add(x,y,z);
  43. add(y,x,z);
  44. }
  45. dist[a]=;
  46. t[headd]=a;
  47. vis[a]=;
  48. while(headd!=tail)
  49. {
  50. int r=head[t[headd]];
  51. vis[t[headd++]]=;
  52. while(r!=-)
  53. {
  54. // printf("r=%d t[headd-1]=%d e[r].to=%d\n",r,t[headd-1],e[r].to);
  55. if(dist[e[r].to]>dist[t[headd-]]+e[r].len)
  56. {
  57. dist[e[r].to]=dist[t[headd-]]+e[r].len;
  58. if(!vis[e[r].to])
  59. {
  60. t[tail++]=e[r].to;
  61. vis[e[r].to]=;
  62. }
  63. }
  64. r=e[r].next;
  65. }
  66. }
  67. cout<<dist[b];
  68. return ;
  69. }

[USACO09OCT]热浪Heat Wave的更多相关文章

  1. 洛谷—— P1339 [USACO09OCT]热浪Heat Wave

    P1339 [USACO09OCT]热浪Heat Wave 题目描述 The good folks in Texas are having a heatwave this summer. Their ...

  2. [最短路]P1339 [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

    我太lj了,所以趁着夜色刷了道最短路的水题....然后,,我炸了. 题目描述: The good folks in Texas are having a heatwave this summer. T ...

  4. luogu P1339 [USACO09OCT]热浪Heat Wave

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

  5. [USACO09OCT]热浪Heat Wave Dijkstra

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

  6. 洛谷 P1339 [USACO09OCT]热浪Heat Wave (堆优化dijkstra)

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

  7. 洛谷P1339 [USACO09OCT]热浪Heat Wave(最短路)

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

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

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

  9. 洛谷P1339 [USACO09OCT]热浪Heat Wave 题解

    题目传送门 这道题实际非常简单好奇是怎么变黄的... 其实也就是一个SPFA,本人非常懒,不想打邻接表,直接用矩阵就好啦... #include<bits/stdc++.h> using ...

随机推荐

  1. eclipse内存溢出设置

    1. arguments中的内容添加红色部分:   -Dcatalina.base="E:\workspace\.metadata\.plugins   \org.eclipse.wst.s ...

  2. Http学习之使用HttpURLConnection发送post和get请求(2)

    接上节Http学习之使用HttpURLConnection发送post和get请求 本节深入学习post请求. 上 节说道,post请求的OutputStream实际上不是网络流,而是写入内存,在ge ...

  3. 【Netty】Netty之Bootstrapping

    一.前言 前面已经学习了Netty的EventLoop以及线程模型,接着学习Netty的Bootstrapping. 二.Bootstrapping 在学习了Netty中的很多组件后,如何将这些组件有 ...

  4. ionic 使用mobisscrolls,实现日期选择的插件

    废话不多说,直接说用法: 1,先下载mobisscrolls的破解版,下载地址,链接:http://pan.baidu.com/s/1boSKf51 密码:5dft 当然你也可以去官网下载,不过官网的 ...

  5. Tomcat 连接池详解

    (转) JDBC 连接池 org.apache.tomcat.jdbc.pool 是Apache-Commons DBCP连接池的一种替换或备选方案. 那究竟为何需要一个新的连接池? 原因如下: Co ...

  6. JavaScript:window.onload问题

    前几天做一个点击按钮,就实现切换图片效果的小demo时,代码看上去没问题,就是达不到效果.让我百思不得其解. 代码如下: <!DOCTYPE html> <html> < ...

  7. 用Python玩微信(非常详细)

    代码放在这里:wzyonggege/python-wechat-itchat 词云那里可以换成小黄人图片 ----------------------------------------------- ...

  8. IE低版本兼容的感悟

    2017-04-09 曾经折磨一代人的兼容问题,如今也在同样折磨着我们,明明可以做JS判断来避免对ie低版本的兼容,但是却还是耐心的做着兼容,你可能会问这是为什么, 我们调的不是兼容,是整整一代人的情 ...

  9. [转]html转码表

    为什么要用转义字符串? HTML中<,>,&等有特殊含义(<,>,用于链接签,&用于转义),不能直接使用.这些符号是不显示在我们最终看到的网页里的,那如果我们希 ...

  10. JavaScript中for循环的使用详解

    or循环是循环最紧凑的形式,并包含有以下三个重要部分组成: 循环初始化计数器的初始值.初始化语句执行循环开始之前. 测试语句,将测试如果给定的条件是真还是假.如果条件为真,那么将要执行的循环中给定的代 ...