未经同意,不得转载。

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. Python正则表达式完全指南(上)

    正则表达式处理文本有如疾风扫秋叶,绝大部分编程语言都内置支持正则表达式,它应用在诸如表单验证.文本提取.替换等场景.爬虫系统更是离不开正则表达式,用好正则表达式往往能收到事半功倍的效果. 介绍正则表达 ...

  2. 入坑以来最清晰的this指南[老哥们来交流指正]

    直接放有道云笔记的链接,博客园的markdown总是用不好. 1.这一篇是this的绑定(call,apply,bind) http://note.youdao.com/noteshare?id=c3 ...

  3. 2017年最好的6个WEB前端开发手册下载

    php中文网为你推荐6个web前端开发相关手册下载,适合web开发人员和php web开发人员进行下载参考学习! 一. html5中文手册 通过制定如何处理所有 HTML 元素以及如何从错误中恢复的精 ...

  4. python爬虫从入门到放弃(五)之 正则的基本使用

    什么是正则表达式 正则表达式是对字符串操作的一种逻辑公式,就是 事先定义好的一些特定字符.及这些特定字符的组合,组成一个"规则字符",这个"规则字符" 来表达对 ...

  5. 论如何把JS踩在脚下 —— JQuery基础及Ajax请求详解

    一.什么是JQuery? JQuery是一种JavaScript框架,是一堆大神搞出来的能够让前端程序猿敲更少代码.实现更多功能的工具(在此,跪谢各位JQuery开发大大们!!!).JQuery的使用 ...

  6. 主题模型(概率潜语义分析PLSA、隐含狄利克雷分布LDA)

    一.pLSA模型 1.朴素贝叶斯的分析 (1)可以胜任许多文本分类问题.(2)无法解决语料中一词多义和多词一义的问题--它更像是词法分析,而非语义分析.(3)如果使用词向量作为文档的特征,一词多义和多 ...

  7. eclipse在线安装s

    1. 打开eclipse软件,点击菜单栏的help-->Install New Software 2. 在弹出来的安装窗口中,点击add按钮,然后输入svn安装地址:http://subclip ...

  8. [codeforces631E]Product Sum

    E. Product Sum time limit per test: 1 second memory limit per test: 256 megabytes input:standard inp ...

  9. STL的空间配置器std_alloc 笔记

    STL的空间配置器std_alloc 笔记 C++的内存分配基本操作是 ::operator new(),内存释放是 ::operator delete(),这里个全局函数相当于C的malloc和fr ...

  10. win7安装oracle10g数据库 提示“…实际版本为6.1”

    1.最重要的是需要以管理员的身份操作 2.修改重要的文件 然后解压,在目录中找到refhost.xml(有两个,我的一个是在stage\prereq\db目录下,一个是在stage\prereq\db ...