zoukankan      html  css  js  c++  java
  • tyvj 1031 热浪 最短路

    题目链接:http://tyvj.cn/p/1031

    背景

    USACO OCT09 9TH

    描述

    德克萨斯纯朴的民眾们这个夏天正在遭受巨大的热浪!!!他们的德克萨斯长角牛吃起来不错,可是他们并不是很擅长生產富含奶油的乳製品。Farmer John此时以先天下之忧而忧,后天下之乐而乐的精神,身先士卒地承担起向德克萨斯运送大量的营养冰凉的牛奶的重任,以减轻德克萨斯人忍受酷暑的痛苦。

    FJ已经研究过可以把牛奶从威斯康星运送到德克萨斯州的路线。这些路线包括起始点和终点先一共经过T (1 <= T <= 2,500)个城镇,方便地标号為1到T。除了起点和终点外地每个城镇由两条双向道路连向至少两个其它地城镇。每条道路有一个通过费用(包括油费,过路费等等)。考虑这个有7个城镇的地图。城镇5是奶源,城镇4是终点(括号内的数字是道路的通过费用)。

                                  [1]----1---[3]-
                                 /               
                          [3]---6---[4]---3--[3]--4
                         /               /       /|
                        5         --[3]--  --[2]- |
                                /        /       |
                          [5]---7---[2]--2---[3]---
                                |       /
                               [1]------



    经过路线5-6-3-4总共需要花费3 (5->6) + 4 (6->3) + 3 (3->4) = 10的费用。

    给定一个地图,包含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)最小的总费用。

     
    分析:最短路。
     1 #include <bits/stdc++.h>
     2 
     3 using namespace std;
     4 
     5 const int maxn = 2510;
     6 const int inf = 0x3f3f3f3f;
     7 
     8 struct Edge {
     9     int from,to,dist;
    10 };
    11 
    12 struct HeapNode {
    13     int u,d;
    14     bool operator < (const HeapNode& rhs ) const {
    15         return d > rhs.d;
    16     }
    17 };
    18 
    19 struct Dijstra {
    20     int n,m;
    21     vector<Edge> edges;
    22     vector<int> G[maxn];
    23     int d[maxn];
    24     bool done[maxn];
    25     int p[maxn];
    26 
    27     void init(int n) {
    28         this->n = n;
    29         for(int i=0;i<n;i++)
    30             G[i].clear();
    31         edges.clear();
    32     }
    33 
    34     void AddEdge(int from,int to,int dist) {
    35         edges.push_back((Edge){from,to,dist});
    36         int m = edges.size();
    37         G[from].push_back(m-1);
    38     }
    39 
    40     void dijstra(int s) {
    41         memset(done,0,sizeof(done));
    42         for(int i=0;i<n;i++)
    43             d[i] = inf;
    44 
    45         d[s] = 0;
    46         priority_queue<HeapNode> Q;
    47         Q.push((HeapNode){s,0});
    48 
    49         while(!Q.empty()) {
    50 
    51             HeapNode x = Q.top();
    52             Q.pop();
    53 
    54             if(done[x.u])
    55                 continue;
    56 
    57             for(int i=0;i<G[x.u].size();i++) {
    58                 Edge& e = edges[G[x.u][i]];
    59                 if(d[e.to]>d[x.u]+e.dist) {
    60                     d[e.to] = d[x.u] + e.dist;
    61                     Q.push((HeapNode){e.to,d[e.to]});
    62                 }
    63             }
    64         }
    65     }
    66 };
    67 Dijstra sol;
    68 
    69 int main()
    70 {
    71     int t,c,ts,te;
    72     scanf("%d%d%d%d",&t,&c,&ts,&te);
    73     ts--;
    74     te--;
    75 
    76     sol.init(t);
    77     for(int i=0;i<c;i++) {
    78         int u,v,dist;
    79         scanf("%d%d%d",&u,&v,&dist);
    80         u--;v--;
    81         sol.AddEdge(u,v,dist);
    82         sol.AddEdge(v,u,dist);
    83     }
    84 
    85     sol.dijstra(ts);
    86     printf("%d
    ",sol.d[te]);
    87 
    88 
    89     return 0;
    90 }
     
  • 相关阅读:
    gc buffer busy/gcs log flush sync与log file sync
    给Oracle年轻的初学者的几点建议
    Android 编程下帧动画在 Activity 启动时自动运行的几种方式
    Android 编程下 Touch 事件的分发和消费机制
    Java 编程下 static 关键字
    Java 编程下 final 关键字
    Android 编程下模拟 HOME 键效果
    Why Are Thread.stop, Thread.suspend, Thread.resume and Runtime.runFinalizersOnExit Deprecated ?
    Extjs4 大型项目目录结构重构
    [转]SQLServer 2008 允许远程连接的配置方法
  • 原文地址:https://www.cnblogs.com/TreeDream/p/6556791.html
Copyright © 2011-2022 走看看