[Usaco2009 Oct]Heat Wave 热浪(裸最短路径)
链接: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 热浪(裸最短路径)的更多相关文章
- BZOJ 3408: [Usaco2009 Oct]Heat Wave 热浪( 最短路 )
普通的最短路...dijkstra水过.. ------------------------------------------------------------------------------ ...
- 3408: [Usaco2009 Oct]Heat Wave 热浪
3408: [Usaco2009 Oct]Heat Wave 热浪 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 67 Solved: 55[Subm ...
- 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; ...
- BZOJ3408: [Usaco2009 Oct]Heat Wave 热浪
最短路模板.选迪杰. #include<stdio.h> #include<string.h> #include<stdlib.h> #include<alg ...
- 洛谷—— P1339 [USACO09OCT]热浪Heat Wave
P1339 [USACO09OCT]热浪Heat Wave 题目描述 The good folks in Texas are having a heatwave this summer. Their ...
- Luogu P1339 热浪Heat Wave
Luogu P1339 热浪Heat Wave 裸·单源最短路. 但是! 有以下坑点: 算过复杂度发现Floyd跑不过去就不要用了. 如果建边是双向边,边的数组大小要开两倍! 考场上如果再把初始化的$ ...
- BZOJ 3407: [Usaco2009 Oct]Bessie's Weight Problem 贝茜的体重问题( dp )
01背包... ----------------------------------------------------------------------- #include<cstdio&g ...
- 3406: [Usaco2009 Oct]Invasion of the Milkweed 乳草的入侵
3406: [Usaco2009 Oct]Invasion of the Milkweed 乳草的入侵 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 8 ...
- 3409: [Usaco2009 Oct]Barn Echoes 牛棚回声
3409: [Usaco2009 Oct]Barn Echoes 牛棚回声 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 57 Solved: 47[ ...
随机推荐
- Excel----考勤表制作自动更新日期
起初效果 1. 我们首先输入年月日,如图 选择日期 按`ctrl+1` 来调出下图: 2. 数据填充 3.设置星期 点击1下面的单元格
- Zxing和QR Code生成和解析二维码
本文是学习慕课网课程<Java生成二维码>(http://www.imooc.com/learn/531)的笔记. 一.二维码的分类 线性堆叠式二维码.矩阵式二维码.邮政码. 二.二维码的 ...
- 关于Oracle中job定时器(通过create_job创建的)配置示例
begin dbms_scheduler.create_job(job_name => 'JOB_BASIC_STATISTIC', job_type => 'STORED_PROCEDU ...
- C++中substr()详解
#include<string> #include<iostream> using namespace std; int main() { string s("123 ...
- Scheduled定时任务器在Springboot中的使用
Scheduled定时任务器是Spring3.0以后自带的一个定时任务器. 使用方式: 1.添加依赖 <!-- 添加 Scheduled 坐标 --> <dependency> ...
- JavaScript之HTML DOM Event
当鼠标在button上点击时,会在button上触发一个click事件.但是button是div的一个子元素, 在button里点击相当于在div里点击,是否click事件也会触发在div上?如果cl ...
- 从认证到调度,K8s 集群上运行的小程序到底经历了什么?
导读:不知道大家有没有意识到一个现实:大部分时候,我们已经不像以前一样,通过命令行,或者可视窗口来使用一个系统了. 前言 现在我们上微博.或者网购,操作的其实不是眼前这台设备,而是一个又一个集群.通常 ...
- pandas中DataFrame重置设置索引
在pandas中,经常对数据进行处理 而导致数据索引顺序混乱,从而影响数据读取.插入等. 小笔总结了以下几种重置索引的方法: import pandas as pd import numpy as n ...
- javaweb01
Java web应用由一组servlet.HTML页,类,以及它可以被绑定的资源构成,它可以在各种供应商提供的实现servlet规范容器中运行javaweb包括这些:Servlet jsp 实用类 静 ...
- Thread--使用condition实现顺序执行
package condition; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Re ...