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

  1. 7 11 5 4
  2. 2 4 2
  3. 1 4 3
  4. 7 2 2
  5. 3 4 3
  6. 5 7 5
  7. 7 3 3
  8. 6 1 1
  9. 6 3 4
  10. 2 4 3
  11. 5 6 3
  12. 7 2 1

Sample Output1

  1. 7

【题解】

这题就是最短路径问题。

用spfa算法就能解决。

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

next[new_e] = fisr[f];

to[new_e] = ...

cose[new_e]=..

first[f] = new_e;

【代码】

  1. #include <cstdio>
  2. #include <cstring>
  3. #define max_e 7000
  4.  
  5. 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];
  6.  
  7. void input_data()
  8. {
  9. scanf("%d%d%d%d",&t,&c,&ts,&te);
  10. for (int i = 1;i <= c;i++) //输入n条边。
  11. {
  12. int rs,re,ce;
  13. scanf("%d%d%d",&rs,&re,&ce);//输入每条边的起点和终点和花费
  14. next[++ne] = first[rs]; //因为是双向边,所以要双向建立。
  15. to[ne] = re;
  16. cost[ne] = ce;
  17. first[rs] = ne;
  18. next[++ne] = first[re];
  19. to[ne] = rs;
  20. cost[ne] = ce;
  21. first[re] = ne;
  22. }
  23. }
  24.  
  25. void spfa()
  26. {
  27. for (int i = 1;i <=t;i++) //一开始到任何地方的距离都为正无穷
  28. dis[i] = -1;
  29. dis[ts] = 0; //除了起点为 0
  30. memset(exsit,false,sizeof(exsit));
  31. exsit[ts] = true;
  32. int head = 0,tail = 1;//把起点加入队列中
  33. team[1] = ts;
  34. while (head != tail) //用了循环队列 所以判断条件是不等
  35. {
  36. head++;
  37. head = ( (head-1) % 6980) + 1;
  38. int f = team[head];
  39. exsit[f] = false; //取出头结点
  40. int temp = first[f];
  41. while (temp != 0 ) //因为用的是前向星存储,所以判断已经找完所有除度的条件是没有前置边了。
  42. {
  43. int t = to[temp];
  44. if (dis[t]== -1 || dis[t] > dis[f] + cost[temp]) //如果可以更新解 则更新
  45. {
  46. dis[t] = dis[f] + cost[temp];
  47. if (!exsit[t]) //如果目标不在队列中 就加入到队列中去 并标记。
  48. {
  49. exsit[t] = true;
  50. tail++;
  51. tail = ((tail-1) % 6980) + 1 ;
  52. team[tail] = t;
  53. }
  54. }
  55. temp = next[temp];
  56. }
  57. }
  58.  
  59. }
  60.  
  61. void output_ans()
  62. {
  63. printf("%d\n",dis[te]);
  64. }
  65.  
  66. int main()
  67. {
  68. //freopen("F:\\rush.txt","r",stdin);
  69. input_data();
  70. spfa();
  71. output_ans();
  72. return 0;
  73. }

【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. amazeui学习笔记--css(常用组件4)--关闭按钮Close

    amazeui学习笔记--css(常用组件4)--关闭按钮Close 一.总结 1.关闭按钮基本用法:关闭按钮样式,可以结合其他不同组件使用.对 <a> 或者 <button> ...

  2. HttpClient FormUrlEncodedContent System.UriFormatException: 无效的 URI: URI 字符串太长问题解决方案

    1.问题描述: HttpClint 使用FormUrlEncodedContent 调用接口时 报错 System.UriFormatException: 无效的 URI: URI 字符串太长: 2. ...

  3. jvisualvm 工具使用

    VisualVM 是Netbeans的profile子项目,已在JDK6.0 update 7 中自带(java启动时不需要特定参数,监控工具在bin/jvisualvm.exe). https:// ...

  4. Virtualizing memory type

    A processor, capable of operation in a host machine, including memory management logic to support a ...

  5. HDU2438 Turn the corner【三分法】【数学几何】

    Turn the corner Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  6. 如何获取用户的地理位置-浏览器地理位置(Geolocation)API 简介

    如何获取用户的地理位置-浏览器地理位置(Geolocation)API 简介 一.总结 一句话总结:Geolocation API(地理位置应用程序接口)提供了一个可以准确知道浏览器用户当前位置的方法 ...

  7. java学习笔记之基础语法(二)

    1.数组: 概念:同一种类型数据的集合,其实,数组就是一个容器 优点:可以方便的对其进行操作,编号从0开始,方便操作这些元素. 2,数组的格式 元素类型[]数组名=new 元素类型[数组元素个数]: ...

  8. PHP回调函数--call_user_func_array

    我这是抄的 感谢 https://www.cnblogs.com/zzl-21086595/p/4547519.html 全局函数的回调 这里的全局函数的意思,是直接使用function定义的函数,它 ...

  9. 【习题5-3 UVA-10935】Throwing cards away I

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 用STL的queue写 [代码] #include <bits/stdc++.h> using namespace st ...

  10. AE 向已存在的要素类中添加字段

    风过无痕 原文向已存在的要素类中添加字段 以前,在用AE写程序的时候,为了方便,一般都是直接新建一个MapControl窗体应用程序.这次需要解决的问题用不到窗口,就突发奇想,直接新建了一个Conso ...