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 }
     
  • 相关阅读:
    Resharper进阶一
    脚本(js)控制页面输入
    IE图标消失 HTML文件图标变为未知图标的解决方法
    memcache_engine + memcachedb = 高性能分布式内存数据库
    sql 求差值
    MSN、QQ的网页链接代码
    IFrame语法:IFrame实例应用集
    Memcache协议
    Windows下的Memcache安装
    文本框 价格 保留两位小数 讨论
  • 原文地址:https://www.cnblogs.com/TreeDream/p/6556791.html
Copyright © 2011-2022 走看看