未经同意,不得转载。

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[],w[][],s[],maxn=;
int main()
{
int n,m,a,b,x,y,z;
cin>>n>>m>>a>>b;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
w[i][j]=maxn;
for(int i=; i<=m; i++)
{
scanf("%d%d%d",&x,&y,&z);
w[x][y]=z;
w[y][x]=z;
}
for(int i=;i<=n;i++)
dist[i]=w[a][i];
dist[a]=;
s[a]=;
for(int i=;i<=n;i++)
{
int minx=maxn,u;
for(int j=;j<=n;j++)
if(s[j]==&&dist[j]<minx)
{
minx=dist[j];
u=j;
}
s[u]=;
if(minx==maxn)
continue;
for(int j=;j<=n;j++)
if(s[j]==&&dist[j]>minx+w[u][j])
dist[j]=minx+w[u][j];
}
cout<<dist[b];
return ;
}

二:

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

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int read()
{
int x=,y=;
char ch=getchar();
while(ch<''||ch>'')
{
if(ch=='-')
y=-;
ch=getchar();
}
while(ch>=''&&ch<='')
{
x=x*+ch-'';
ch=getchar();
}
return x*y;
}
struct edge
{
int next,to,len;
} e[];
int head[],cnt,t[],headd,tail=,vis[],dist[];
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,-,sizeof(head));
memset(dist,/,sizeof(dist));
int n=read(),m=read(),a=read(),b=read(),x,y,z;
for(int i=; i<=m; i++)
{
x=read(),y=read(),z=read();
add(x,y,z);
add(y,x,z);
}
dist[a]=;
t[headd]=a;
vis[a]=;
while(headd!=tail)
{
int r=head[t[headd]];
vis[t[headd++]]=;
while(r!=-)
{
// 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-]]+e[r].len)
{
dist[e[r].to]=dist[t[headd-]]+e[r].len;
if(!vis[e[r].to])
{
t[tail++]=e[r].to;
vis[e[r].to]=;
}
}
r=e[r].next;
}
}
cout<<dist[b];
return ;
}

三:

SPFA

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int read()
{
int x=,y=;
char ch=getchar();
while(ch<''||ch>'')
{
if(ch=='-')
y=-;
ch=getchar();
}
while(ch>=''&&ch<='')
{
x=x*+ch-'';
ch=getchar();
}
return x*y;
}
struct edge
{
int next,to,len;
} e[];
int head[],cnt,t[],headd,tail=,vis[],dist[];
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,-,sizeof(head));
memset(dist,/,sizeof(dist));
int n=read(),m=read(),a=read(),b=read(),x,y,z;
for(int i=; i<=m; i++)
{
x=read(),y=read(),z=read();
add(x,y,z);
add(y,x,z);
}
dist[a]=;
t[headd]=a;
vis[a]=;
while(headd!=tail)
{
int r=head[t[headd]];
vis[t[headd++]]=;
while(r!=-)
{
// 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-]]+e[r].len)
{
dist[e[r].to]=dist[t[headd-]]+e[r].len;
if(!vis[e[r].to])
{
t[tail++]=e[r].to;
vis[e[r].to]=;
}
}
r=e[r].next;
}
}
cout<<dist[b];
return ;
}

[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. 创建发布自己的npm包

    我们基于nodejs平台上面的npm上,可以随意下载很多npm安装包.那我们如何创建自己的npm包呢?很简单,废话少说,开始做~ 开始做之前nodejs默认是要安装的,怎么安装自行百度其他教程. 首先 ...

  2. gulp+browserSync自动刷新页面

    BrowserSync “Browsersync能让浏览器实时.快速响应您的文件更改(html.js.css.sass.less等)并自动刷新页面.更重要的是 Browsersync可以同时在PC.平 ...

  3. MySQL 开启慢查询日志

    1.1 简介 开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能. 1.2 登录数据库查看 [root@localhost lib]# ...

  4. 【JAVAEE学习笔记】hibernate02:实体规则、对象状态、缓存、事务、批量查询和实现客户列表显示

    一.hibernate中的实体规则 实体类创建的注意事项 1.持久化类提供无参数构造 2.成员变量私有,提供共有get/set方法访问.需提供属性 3.持久化类中的属性,应尽量使用包装类型 4.持久化 ...

  5. 一天搞定CSS: CSS选择器优先级--08

    选择器优先级:是指代码的执行顺序 通俗的说,就是多个选择器同时对一个标签分别添加样式,那么这个标签显示那个选择器设置的样式 1.优先级规则 2.规则1和2说明 优先级相同,谁后谁优先 优先级不同,优先 ...

  6. Java之FilenameFilter接口

    FilenameFilter接口:是用于过滤文件的 要实现的是accept方法 实例代码: 1,匿名类实现FilenameFilter-–过滤指定类型文件 package File类过滤器; impo ...

  7. 模板C++ 03图论算法 1最短路之单源最短路(SPFA)

    3.1最短路之单源最短路(SPFA) 松弛:常听人说松弛,一直不懂,后来明白其实就是更新某点到源点最短距离. 邻接表:表示与一个点联通的所有路. 如果从一个点沿着某条路径出发,又回到了自己,而且所经过 ...

  8. C++ #if #endif #define #ifdef #ifndef #if defined #if !defined详解 (转)

    (源)http://blog.csdn.net/sky1203850702/article/details/42024673 首先,让我们先从头文件开始,在很多头文件里,我们会看到这样的语句 #ifn ...

  9. myeclipse导入项目时出现Exploded location overlaps an existing deployment错误解决方法

    版权声明:本文为博主原创文章,转载时请注明原文链接. 今天拿别人的项目,在自己的软件上配置,通过tomcat添加项目时出现了 Exploded location overlaps an existin ...

  10. 生成淘口令发现的一个趣事 c#

    1.今天,查看网站log,发现如下报错 详细错误:未将对象引用设置到对象的实例. 报错url:http://www.94dazhe.com/mobile/goods/show-546829202052 ...