链接: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. SAP HANA学习笔记

    SAP HANA:High-Performance Analytic ApplianceSAP HANA XSC:Extended Application Services Classic(SAP推出 ...

  2. jdk1.6以后 对synchronized锁做了哪些优化

    1.适应自旋锁 自旋锁:为了减少线程状态改变带来的消耗 不停地执行当前线程 2.锁消除: 不可能存在共享数据竞争的锁进行消除 3.锁粗化: 将连续的加锁 精简到只加一次锁 4.轻量级锁: 无竞争条件下 ...

  3. ABP JTable如何显示序列号

    显示序列号 recordsLoaded: function (event, data) { var SrNo = 0; if (data.records) { $.each(data.records, ...

  4. POJ 1200 Crazy Search 字符串的Hash查找

    第一次涉及HASH查找的知识 对于字符串的查找有很多前人开发出来的HASH函数,比较常用的好像是ELF 和 BKDR. 这道题没想到突破点是在于其nc值,告诉你组成字符串的字母种类. 还有用26进制, ...

  5. import datetime

    import datetimenow = datetime.datetime.now()print('当前时间:',now) 当前时间: 2019-11-21 11:11:58.093122

  6. python logging的输出

    ---恢复内容开始--- python中logging的使用 什么是日志: 日志是一种可以追踪某些软件运行时所发生事件的方法 软件开发人员可以向他们的代码中调用日志记录相关的方法来表明发生了某些事情 ...

  7. ajax+springboot完整例子

    1.index.htm <textarea rows="10" cols="60%" id="cover">ss</tex ...

  8. java加解密算法--对称加密工作模式

    对称加密又分为分组加密和序列密码.分组密码,也叫块加密(block cyphers),一次加密明文中的一个块.是将明文按一定的位长分组,明文组经过加密运算得到密文组,密文组经过解密运算(加密运算的逆运 ...

  9. Python说文解字_杂谈08

    1. Python变量到底是什么? Python和Java中的变量本质不一样,python的变量实质是一个指针 int str,便利贴 a = 1 # 1. a贴在1上面 # 2. 它的过程是先生成对 ...

  10. Python笔记_第四篇_高阶编程_进程、线程、协程_3.进程vs线程

    1.多任务的实现原理: 通常我们会设计Mater-Workder模式,Master负责分配任务,Worker负责执行任务,因此多任务环境下,通常是一个Master,多个Worker 2.多进程: 主进 ...