Time Limit: 1 second

Memory Limit: 128 MB

【问题描述】

 德克萨斯纯朴的民眾们这个夏天正在遭受巨大的热浪!!!他们的德克萨斯长角牛吃起来不错,可是他们并不是很擅长生產富含奶油的乳製品。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的最小总费用。数据保证至少存在一条道路。

【数据规模】

Sample Input1

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

Sample Output1

7

【题解】

这题就是最短路径问题。

用spfa算法就能解决。

练习了一下前向星的存储方式。

next[new_e] = fisr[f];

to[new_e] = ...

cose[new_e]=..

first[f] = new_e;

【代码】

#include <cstdio>
#include <cstring>
#define max_e 7000 int t,c,ts,te,next[max_e*2],to[max_e*2],cost[max_e*2],ne = 0,dis[3000],exsit[3000],team[7000],first[3000]; void input_data()
{
scanf("%d%d%d%d",&t,&c,&ts,&te);
for (int i = 1;i <= c;i++) //输入n条边。
{
int rs,re,ce;
scanf("%d%d%d",&rs,&re,&ce);//输入每条边的起点和终点和花费
next[++ne] = first[rs]; //因为是双向边,所以要双向建立。
to[ne] = re;
cost[ne] = ce;
first[rs] = ne;
next[++ne] = first[re];
to[ne] = rs;
cost[ne] = ce;
first[re] = ne;
}
} void spfa()
{
for (int i = 1;i <=t;i++) //一开始到任何地方的距离都为正无穷
dis[i] = -1;
dis[ts] = 0; //除了起点为 0
memset(exsit,false,sizeof(exsit));
exsit[ts] = true;
int head = 0,tail = 1;//把起点加入队列中
team[1] = ts;
while (head != tail) //用了循环队列 所以判断条件是不等
{
head++;
head = ( (head-1) % 6980) + 1;
int f = team[head];
exsit[f] = false; //取出头结点
int temp = first[f];
while (temp != 0 ) //因为用的是前向星存储,所以判断已经找完所有除度的条件是没有前置边了。
{
int t = to[temp];
if (dis[t]== -1 || dis[t] > dis[f] + cost[temp]) //如果可以更新解 则更新
{
dis[t] = dis[f] + cost[temp];
if (!exsit[t]) //如果目标不在队列中 就加入到队列中去 并标记。
{
exsit[t] = true;
tail++;
tail = ((tail-1) % 6980) + 1 ;
team[tail] = t;
}
}
temp = next[temp];
}
} } void output_ans()
{
printf("%d\n",dis[te]);
} int main()
{
//freopen("F:\\rush.txt","r",stdin);
input_data();
spfa();
output_ans();
return 0;
}

【U014】热浪(前向星存储方法)的更多相关文章

  1. hiho一下 第四十七周 拓扑排序一 【静态数组链式前向星存储结构实现 + 拓扑跳出 】

    题目1 : 拓扑排序·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 由于今天上课的老师讲的特别无聊,小Hi和小Ho偷偷地聊了起来. 小Ho:小Hi,你这学期有选什么 ...

  2. 【模板】链式前向星+spfa

    洛谷传送门--分糖果 博客--链式前向星 团队中一道题,数据很大,只能用链式前向星存储,spfa求单源最短路. 可做模板. #include <cstdio> #include <q ...

  3. 洛谷P3371单源最短路径Dijkstra版(链式前向星处理)

    首先讲解一下链式前向星是什么.简单的来说就是用一个数组(用结构体来表示多个量)来存一张图,每一条边的出结点的编号都指向这条边同一出结点的另一个编号(怎么这么的绕) 如下面的程序就是存链式前向星.(不用 ...

  4. # [Poj 3107] Godfather 链式前向星+树的重心

    [Poj 3107] Godfather 链式前向星+树的重心 题意 http://poj.org/problem?id=3107 给定一棵树,找到所有重心,升序输出,n<=50000. 链式前 ...

  5. 图的存储结构:邻接矩阵(邻接表)&链式前向星

    [概念]疏松图&稠密图: 疏松图指,点连接的边不多的图,反之(点连接的边多)则为稠密图. Tips:邻接矩阵与邻接表相比,疏松图多用邻接表,稠密图多用邻接矩阵. 邻接矩阵: 开一个二维数组gr ...

  6. 大规模图的存储(前向星、next数组)

    大规模图的储存 在信息学中,经常会遇到比较大规模图,使用指针固然是很好的方法,不过一有指针速度不如数组之说,二有指针不如数组稳定之说,三有,也是最重要的,指针不如数组来得方便,这也便是大多数Oier不 ...

  7. 图论之初,拓扑排序、前向星(通过存储边来存储图)加优先队列对拓扑的优化-----hdu1285

    确定比赛名次 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  8. 链式前向星存树图和遍历它的两种方法【dfs、bfs】

    目录 一.链式前向星存图 二.两种遍历方法 一.链式前向星存图:(n个点,n-1条边) 链式前向星把上面的树图存下来,输入: 9 ///代表要存进去n个点 1 2 ///下面是n-1条边,每条边连接两 ...

  9. poj-1459-最大流dinic+链式前向星-isap+bfs+stack

    title: poj-1459-最大流dinic+链式前向星-isap+bfs+stack date: 2018-11-22 20:57:54 tags: acm 刷题 categories: ACM ...

随机推荐

  1. Could not find action or result: There is no Action mapped for namespace [/] and action name [GetG

    Could not find action or result: /car/GetGpsDataAction  There is no Action mapped for namespace [/] ...

  2. 推荐一款稳定快速免费的前端开源项目 CDN 加速服务

    前面学习到什么是CDN,全称是Content Delivery Network,即内容分发网络.CDN的通俗理解就是网站加速,CPU均衡负载. CDN的基本思路是尽可能避开互联网上有可能影响数据传输速 ...

  3. 互信息 & 卡方 - 文本挖掘

    在做文本挖掘,特别是有监督的学习时,常常需要从文本中提取特征,提取出对学习有价值的分类,而不是把所有的词都用上,因此一些词对分类的作用不大,比如“的.是.在.了”等停用词.这里介绍两种常用的特征选择方 ...

  4. pat 2-05. 求集合数据的均方差(水题)

    代码: #include<cstdio> #include<iostream> #include<cmath> using namespace std; doubl ...

  5. netty检测系统工具PlatformDependent

    1. 检测jdk版本 @SuppressWarnings("LoopStatementThatDoesntLoop") private static int javaVersion ...

  6. iOS_04_学习ios开发的准备

    学习ios开发的准备 * 英语水平:看懂26个英文字母. * 计算机专业:不要求计算机专业,但得有脑子. * 学习态度:积极思考.积极动手.能吃苦.有兴趣. * 编程语言:C语言.C++(可选).Ob ...

  7. 如何启用“锁定内存页”选项 (Windows)

    默认情况下,禁用 Windows 策略"锁定内存页"选项.必须启用此权限才能配置地址窗口化扩展插件 (AWE).此策略将确定哪些帐户可以使用进程将数据保留在物理内存中,从而阻止系统 ...

  8. [Nuxt] Navigate with nuxt-link and Customize isClient Behavior in Nuxt and Vue.js

    Because Nuxt renders pages on the server, you should use the nuxt-link components to navigate betwee ...

  9. stm32的pwm波

  10. ztree实现左边动态生成树,右边为具体信息功能

    页面原型图: 图片.png 功能需求:点击左边树上的子节点,像后台发送请求,将请求到的信息展示在右边的表单里面 前端代码实现: 引入css文档: <link rel="styleshe ...