• zoj 2281 Way to Freedom


    ZOJ Problem Set - 2281
    Way to Freedom

    Time Limit: 2 Seconds      Memory Limit: 32768 KB

    Background

    "Now, you are getting closer and closer to Your Gate to Freedom!

    And you will pass the most dangerous paths! Be careful!"

    We're in a maze now. There're many rooms floating in the sky connected with wooden bridges. Bridges seems unstable...


    Problem

    At first, I'm in room X, and I want to go to room Y. There're N (N <= 100,000) rooms connected with M (M <= 1,000,000) edges. Each edge has a limit of weight, if weight exceeds this value, the edge will split, and drop me into the river.

    How many things I can take to room Y at most?


    Input

    This problem contains multiple test cases.

    Each test case begins with two integers N and M, then M lines, each line has 3 numbers: X, Y and Weight (<=2,000,000,000).


    Output

    For each test case, output the maximum weight I can take.


    Sample Input

    6 6
    1 5 2000
    2 4 5000
    2 5 3300
    3 4 2400
    3 6 2200
    4 6 6000
    3 5


    Sample Output

    2400


    Author: JIANG, Yanyan
    Contest: A Great Beloved and My Gate to Freedom
    There is a cx, there is a love_cx.


    Source: JIANG, Yanyan's Contest #2
    Submit    Status
    //1838048 2009-04-19 12:27:25 Accepted  2281 C++ 580 6588 Wpl 
    //更牛的Dijkstra+优先队列解决最大网络流问题
    #include <iostream>
    #include 
    <queue>
    #include 
    <vector>
    #define MAX 100005
    using namespace std;
    typedef 
    struct node
    {
        
    int heap;
        
    int dis;
        node()
        {}
        node(
    int h,int d)
        {
            heap
    =h;
            dis
    =d;
        }
        friend 
    bool operator <(node a,node b)  //用的是大堆
        {
            
    return a.dis<b.dis;
        }
    }Point;
    priority_queue
    <Point>Q;
    Point temp;
    vector
    <Point>G[MAX];
    int n,m,start,end,dis[MAX],zz=1;
    void Init()
    {
        
    int i,a,b,s;
        
    for(i=1;i<=n;i++)  //初始化
            G[i].clear();
        
    while(m--)
        {
            scanf(
    "%d%d%d",&a,&b,&s);
            G[a].push_back(node(b,s));
            G[b].push_back(node(a,s));
        }
        scanf(
    "%d%d",&start,&end);
    }
    int GetMin(int a,int b)
    {
        
    if(a==-1)
            
    return b;
        
    else
        {
            
    if(a>b)
                
    return b;
            
    else
                
    return a;
        }
    }
    void Dijkstra()
    {
        
    int i,tp,td,k;
        
    for(i=1;i<=n;i++)
        {
            dis[i]
    =-1;
        }
        
    while(!Q.empty())
            Q.pop();
        Q.push(node(start,
    -1));
        
    while(!Q.empty())
        {
            temp
    =Q.top();
            k
    =temp.heap;
            Q.pop();
            
    if(k==end)
            {
                printf(
    "%d\n",temp.dis);
                
    return ;
            }
            
    for(i=0;i<G[temp.heap].size();i++)
            {
                tp
    =G[temp.heap][i].heap;
                td
    =G[temp.heap][i].dis;
                
    if(GetMin(dis[k],td)>dis[tp])
                {
                    dis[tp]
    =GetMin(dis[k],td);
                    Q.push(node(tp,dis[tp]));
                }
            }
        }
        printf(
    "0\n");
    }
    int main()
    {
        
    while(scanf("%d%d",&n,&m)!=EOF)
        {
            Init();
            Dijkstra();
        }
        
    return 0;
    }
  • 相关阅读:
    c++中的.hpp文件
    最近用vs使用的比较好的工具
    new内存分配失败
    "0x%08x" C语言
    python爬取智联招聘工作岗位信息
    GIS应用1000例01序
    lxml 中连续调用xpath出的问题
    arcgis JavaScript API总体结构
    PostgreSQL安装
    ES6转ES5的babel的使用
  • 原文地址:https://www.cnblogs.com/forever4444/p/1485947.html
Copyright © 2020-2023  润新知