链接:https://ac.nowcoder.com/acm/contest/1082/F
来源:牛客网

题目描述

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).

POINTS: 300

输入描述:

* Line 1: Four space-separated integers: T, C, Ts, and Te
* Lines 2..C+1: Line i+1 describes road i with three space-separated integers: R1i, R2i, and Ci

输出描述:

* Line 1: A single integer that is the length of the shortest route from Ts to Te. It is guaranteed that at least one route exists.

示例1

输入


输出

 

说明

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

裸最短路

刚开始写了最简单的Floyd,超时了

Floyd:

 #include <stdio.h>
#include <string.h>
#include <iostream>
#include <string>
#include <math.h>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <stack>
#include <map>
#include <math.h>
const int INF=0x3f3f3f3f;
typedef long long LL;
const int mod=1e9+;
const int maxn=1e5+;
using namespace std; int G[][]; int main()
{
int T,C,Ts,Te;
scanf("%d %d %d %d",&T,&C,&Ts,&Te);
memset(G,INF,sizeof(G));
for(int i=;i<=C;i++)
{
int u,v,t;
scanf("%d %d %d",&u,&v,&t);
G[u][v]=t;
G[v][u]=t;
}
for(int k=;k<=T;k++)
{
for(int i=;i<=T;i++)
{
G[i][i]=;
for(int j=;j<=T;j++)
{
if(G[i][j]>G[i][k]+G[k][j])
G[i][j]=G[i][k]+G[k][j];
}
}
}
printf("%d\n",G[Ts][Te]);
return ;
}

Dijkstra和SPFA都可以过

SPFA:

 #include <stdio.h>
#include <string.h>
#include <iostream>
#include <string>
#include <math.h>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <stack>
#include <map>
#include <math.h>
const int INF=0x3f3f3f3f;
typedef long long LL;
const int mod=1e9+;
//const double PI=acos(-1);
const int maxn=1e5+;
using namespace std;
//ios::sync_with_stdio(false);
// cin.tie(NULL); struct Edge_node
{
int to;
int next;
int cost;
}Edge[<<]; int n,m;
int head[];
int cnt;
int dis[];
bool inqueue[]; void add_edge(int u,int v,int t)
{
Edge[cnt].to=v;
Edge[cnt].cost=t;
Edge[cnt].next=head[u];
head[u]=cnt++;
} void SPFA(int x)
{
queue<int> qe;
qe.push(x);
inqueue[x]=true;
while(!qe.empty())
{
int u=qe.front();
qe.pop();
inqueue[u]=false;
for(int i=head[u];i!=-;i=Edge[i].next)
{
int v=Edge[i].to;
if(dis[u]+Edge[i].cost<dis[v])
{
dis[v]=dis[u]+Edge[i].cost;
if(!inqueue[v])
{
qe.push(v);
inqueue[v]=true;
}
}
}
}
} int main()
{
int a,b;
scanf("%d %d %d %d",&n,&m,&a,&b);
memset(dis,INF,sizeof(dis));
memset(head,-,sizeof(head));
for(int i=;i<=m;i++)
{
int u,v,t;
scanf("%d %d %d",&u,&v,&t);
add_edge(u,v,t);
add_edge(v,u,t);
}
dis[a]=;
SPFA(a);
printf("%d\n",dis[b]);
return ;
}

Dijkstra:

 #include <stdio.h>
#include <string.h>
#include <iostream>
#include <string>
#include <math.h>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <stack>
#include <map>
#include <math.h>
const int INF=0x3f3f3f3f;
typedef long long LL;
const int mod=1e9+;
//const double PI=acos(-1);
const int maxn=1e5+;
using namespace std;
//ios::sync_with_stdio(false);
// cin.tie(NULL); struct Edge_node
{
int to;
int next;
int cost;
}Edge[<<]; int n,m,a,b;
int head[];
int cnt;
int dis[]; struct cmp
{
bool operator()(int x,int y)
{
return dis[x]>dis[y];
}
}; void add_edge(int u,int v,int t)
{
Edge[cnt].to=v;
Edge[cnt].cost=t;
Edge[cnt].next=head[u];
head[u]=cnt++;
} void Dijkstra()
{
priority_queue<int,vector<int>,cmp > qe;
dis[a]=;
qe.push(a);
while(!qe.empty())
{
int u=qe.top();
qe.pop();
for(int i=head[u];i!=-;i=Edge[i].next)
{
int v=Edge[i].to;
if(dis[u]+Edge[i].cost<dis[v])
{
dis[v]=dis[u]+Edge[i].cost;
qe.push(v);
}
}
}
} int main()
{
scanf("%d %d %d %d",&n,&m,&a,&b);
memset(dis,INF,sizeof(dis));
memset(head,-,sizeof(head));
for(int i=;i<=m;i++)
{
int u,v,t;
scanf("%d %d %d",&u,&v,&t);
add_edge(u,v,t);
add_edge(v,u,t);
}
Dijkstra();
printf("%d\n",dis[b]);
return ;
}

[Usaco2009 Oct]Heat Wave 热浪(裸最短路径)的更多相关文章

  1. BZOJ 3408: [Usaco2009 Oct]Heat Wave 热浪( 最短路 )

    普通的最短路...dijkstra水过.. ------------------------------------------------------------------------------ ...

  2. 3408: [Usaco2009 Oct]Heat Wave 热浪

    3408: [Usaco2009 Oct]Heat Wave 热浪 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 67  Solved: 55[Subm ...

  3. P3408: [Usaco2009 Oct]Heat Wave 热浪

    水题,裸的最短路. ; type link=^node; node=record t,d:longint; f:link; end; var n,m,s,i,j,u,v,w,max:longint; ...

  4. BZOJ3408: [Usaco2009 Oct]Heat Wave 热浪

    最短路模板.选迪杰. #include<stdio.h> #include<string.h> #include<stdlib.h> #include<alg ...

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

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

  6. Luogu P1339 热浪Heat Wave

    Luogu P1339 热浪Heat Wave 裸·单源最短路. 但是! 有以下坑点: 算过复杂度发现Floyd跑不过去就不要用了. 如果建边是双向边,边的数组大小要开两倍! 考场上如果再把初始化的$ ...

  7. BZOJ 3407: [Usaco2009 Oct]Bessie's Weight Problem 贝茜的体重问题( dp )

    01背包... ----------------------------------------------------------------------- #include<cstdio&g ...

  8. 3406: [Usaco2009 Oct]Invasion of the Milkweed 乳草的入侵

    3406: [Usaco2009 Oct]Invasion of the Milkweed 乳草的入侵 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 8 ...

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

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

随机推荐

  1. 201809-1 卖菜 Java

    思路: 需要两个数组,一个保存原始数据 import java.util.Scanner; public class Main { public static void main(String[] a ...

  2. 配置自己的sublime

    我配置的sublime的是这样的,就是在input里输入数据,然后在output里可以得到数据,这样比较方便,看到有的大神还配置背景和其他的,有时间搞一下: 首先把编译器g++配置到环境变量,可以从d ...

  3. jquery关于Select元素的操作

    jQuery获取Select元素,并选择的Text和Value: $("#select_id").change(function(){//code...});           ...

  4. CodeForces - 748F Santa Clauses and a Soccer Championship

    题意:有k对队伍,每对队伍之间将举行两次比赛,两支队伍各主办一次.住宿的地方要求在两支队伍家乡的最短路的结点上或者在两支队伍的家乡.问在选择住宿处最少的情况下,怎么组成这k对队伍? 分析: 1.因为n ...

  5. 19 01 15 django 数据库设计模型 管理站点 注意:在引入外键在django 2以上改版

    模型设计 我们之前操作数据库是通过写sql语句  ORM框架    可以通过不写sql  语句来进行操作数据库 1.定义模型类 模型类定义在models.py文件中,继承自models.Model类. ...

  6. css 字符过长...

    text-overflow: ellipsis; white-space: nowrap; overflow: hidden; overflow: hidden; white-space: nowra ...

  7. Redis的数据结构和对象。

    一.简单动态字符串(simple dynamic string--SDS) Redis使用SDS表示字符串值,键值对都用SDS实现.SDS中的字符数组buf以空字符串结尾,好处是可以直接重用一部分C字 ...

  8. awk下 gsub函数用法

     (2012-03-27 01:37:28) 标签: awk gsub linux 函数 it 分类: linux gsub函数则使得在所有正则表达式被匹配的时候都发生替换 gsub(regular ...

  9. Linux 配置单机yum源--ISO镜像做源

    前提:防火墙关闭.SElinus关闭 1.上传ISO镜像(建议传到home目录下) [root@localhost home]# ls iso/ CentOS-.iso 2.挂载目录 [root@lo ...

  10. PAT A1133 Splitting A Linked List (25) [链表]

    题目 Given a singly linked list, you are supposed to rearrange its elements so that all the negative v ...