zoukankan      html  css  js  c++  java
  • tyvj1031 热浪

    背景

    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)最小的总费用。

    输入格式

    * 第一行: 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

    输出

    7

    备注

    5->6->1->4 (3 + 1 + 3)

    #include<iostream>
    #include<vector>
    #define mx 10000
    #define maxint 100000000
    using namespace std;
    struct edge{
        int v;
        int w;
    };
    int n,p,ts,te,j[mx],d[mx];
    vector<edge> g[mx];
    void spfa(){
        for(int i = 1;i <= n;i++){
            d[i] = maxint;
            j[i] = 0;
        }
        int u = 0,t = 1,now,q[mx];
        q[u] = ts;
        j[ts] = 1;
        d[ts] = 0;
        while(u != t){
            now = q[u];
            j[now] = 1;
            if(g[now].size() > 0){
                for(int i = 0;i < g[now].size();i++){
                    if(d[g[now][i].v] > d[now] + g[now][i].w){
                        d[g[now][i].v] = d[now] + g[now][i].w;
                        if(!j[g[now][i].v]){
                            q[t++] = g[now][i].v;
                            j[g[now][i].v] = 1;
                        }
                        
                    }
                }
            }
            u++;
            j[now] = 0;
            
        }
    }
    int main(){
        cin>>n>>p>>ts>>te;
        int u,v,w;
        edge tmp;
        for(int i = 1;i <= p;i++){
            cin>>u>>v>>w;
            tmp.v = v;
            tmp.w = w;
            g[u].push_back(tmp);
            tmp.v = u;
            tmp.w = w;
            g[v].push_back(tmp);
        }
        spfa();
        cout<<d[te]<<endl;
        return 0;
    }
  • 相关阅读:
    各种解码网站
    带你走进php大马的结构模块编写之路
    如何优雅的调戏XSS
    静态分析第三发 so文件分析(小黄人快跑)
    C# Window编程随记——ClickOnce程序部署
    sklearn特征选择和分类模型
    实现Activity的滑动返回效果
    JSP自己定义标签继承哪个类
    [LeetCode][Java] Unique Paths II
    关于腾讯微博之死,离职员工所了解的真相
  • 原文地址:https://www.cnblogs.com/hyfer/p/5853353.html
Copyright © 2011-2022 走看看