最近愉快地决定要由边集数组转向Vector存图,顺便开始图论集训

老惯例,以题写模板

P1339 [USACO09OCT]热浪Heat Wave

题目描述

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)

最短路模板题。

Vector存图原理:

边结构体Edge{int cost,int from,int to}

Edge edge[MAXE]

vector<int> G[MAXV];向量G[MAXV][i]代表从MAXV出发的第i条边在edge中的编号

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <queue> using namespace std; const int MAXV = 2500 + 10;
const int MAXE = 6200 + 10; struct Edge
{
int from,to,c;
Edge(int u,int v,int cost):from(u),to(v),c(cost){}
Edge(){}
};
Edge edge[MAXE * 2];
vector<int> G[MAXV]; int read()
{
int x = 0;char ch = getchar();char c = ch;
while(ch < '0' && ch > '9')c = ch,ch = getchar();
while(ch >= '0' && ch <= '9')x = x * 10 + ch - '0',ch = getchar();
if(c == '-')x = -1 * x;
return x;
} const int INF = 0x3f3f3f3f; int s,t,n,m;
bool b[MAXV];
int d[MAXV]; void SPFA()
{
memset(b,0,sizeof(b));
memset(d,0x3f,sizeof(d));
d[s] = 0;
queue<int> q;
q.push(s);
while(!q.empty())
{
int x = q.front();
q.pop();
b[x] = false;
int num = G[x].size();
for(int i = 0;i < num;i ++)
{
int p = G[x][i];
Edge temp = edge[p];
p = temp.to;
if(d[x] + temp.c < d[p])
{
d[p] = d[x] + temp.c;
if(!b[p])
{
b[p] = true;
q.push(p);
}
}
}
}
} int main()
{
n = read();m = read();s = read();t = read();
int temp1,temp2,temp3;
for(int i = 1;i <= m * 2;i +=2)
{
temp1 = read();temp2 = read();temp3 = read();
edge[i] = Edge(temp1,temp2,temp3);
edge[i + 1] = Edge(temp2,temp1,temp3);
G[temp1] .push_back(i);
G[temp2] .push_back(i + 1);
}
SPFA();
printf("%d", d[t]);
return 0;
}

最新文章

  1. 《BI项目笔记》创建计算成员
  2. Chocolate_DP
  3. HDU 4610 Cards (合数分解,枚举)
  4. 用VS2010开发Android应用的配置方法
  5. 【Xamarin开发 Android 系列 8】 创建一个Json读取数据应用(上)
  6. 手机浏览器下IScroll中click事件
  7. EOS数据源的配置
  8. mysql的内连接,外连接(左外连接,右外连接)巩固
  9. CSS中编写省略号代码片段
  10. iOS 字体权重weight
  11. SpringCloud笔记七:Zuul
  12. C 基于数组存储的堆栈实现
  13. java新知识系列 一
  14. pip使用国内源
  15. PDO查询语句结果中文乱码
  16. 【XSY2787】Mythological VII 贪心
  17. Http 持久连接与 HttpClient 连接池
  18. 把vim改装为source sight
  19. springmvc接受及响应ajax请求。 以及@RequestBody 和@ResponseBody注解的使用
  20. python-mysql数据库导表存excel后发邮件(实例2)

热门文章

  1. shell与crontab定时器的结合
  2. 笔试之const问题
  3. 设置和修改Linux的swap分区大小
  4. [自学]数据库ER图基础概念整理(转)
  5. Python-异常处理 使用selenium库自动爬取数据
  6. 主成分分析(PCA)原理详解_转载
  7. MyBatis配置文件(三)--typeAliases别名
  8. 转载 Python 安装setuptools和pip工具操作方法(必看)
  9. ongl与Struts标签
  10. Leetcode443.String Compression压缩字符串