zoukankan      html  css  js  c++  java
  • 【POJ】1797 Heavy Transportation

    题目链接:http://poj.org/problem?id=1797

    题意:n个城镇,m条路上能承载的最大重量。现在问你从1到n的最大承重量。

    题解:spfa的变体。

    假设当前1->当前点的承载量是d[v] 比 从1->k的承载量d[now] 小 或者 是比当前的承载量e[now][i].second小,就更新。

    然后注意一下初始化的时候d[]的大小。具体的看代码吧。QWQ板子好用。

    代码:

     1 #include<iostream>
     2 #include<stack>
     3 #include<vector>
     4 #include<queue>
     5 #include<algorithm>
     6 using namespace std;
     7 const int maxn = 2e5+7;
     8 
     9 vector< pair<int,int> > e[maxn];
    10 
    11 int n,m;
    12 int d[maxn],inq[maxn];
    13 
    14 void init(){
    15     for(int i = 0; i < maxn; i++)
    16         e[i].clear();
    17     for(int i = 0 ;i < maxn ; i++)
    18         inq[i] = 0;
    19     for(int i = 0 ; i < maxn ; i++)
    20         d[i] = 0;
    21 }
    22 
    23 int main() {
    24     int T;
    25     cin>>T;
    26     int cas = 1;
    27     while(T--){
    28         cin>>n>>m;
    29         init();
    30         int x,y,z;
    31         for(int i = 0; i < m ;i++){
    32             cin>>x>>y>>z;
    33             e[x].push_back(make_pair(y,z));
    34             e[y].push_back(make_pair(x,z));
    35         }
    36         int s,t;
    37         //cin>>s>>t;
    38         s = 1;
    39         t = n;
    40         queue<int>Q;
    41         Q.push(s);
    42         d[s] = 1e9 ;    //比小的话就初始化最大。
    43         inq[s] = 1;
    44         while( !Q.empty() ){
    45             int now = Q.front();
    46             Q.pop();
    47             inq[now] = 0;
    48             for(int i = 0; i < e[now].size() ; i++){
    49                 int v = e[now][i].first;
    50                 //改。
    51                 if(d[v] < min( d[now] , e[now][i].second)){
    52                     d[v] = min(d[now] , e[now][i].second);
    53                     if(!inq[v]){
    54                         inq[v] = 1;
    55                         Q.push(v);
    56                         continue;
    57                     }
    58                 }
    59             }
    60 
    61         }
    62         printf("Scenario #%d:
    ",cas++);
    63         cout<<d[t]<<endl;
    64         cout<<endl;
    65     }
    66     return 0;
    67 }
  • 相关阅读:
    POJ1087 A Plug for UNIX 网络流
    HDU4405 Aeroplane chess 期望DP
    POJ1062 昂贵的聘礼 区间枚举
    HDU4403 A very hard Aoshu problem 枚举
    HDU4407 Sum 容斥定理
    POJ2750 Potted Flower 线段树+DP
    软件项目开发流程以及人员职责
    10款最流行的开源Web设计工具
    C# 把\\r\\n替换为\r\n
    jquery validation 用到的输入验证正则表达式
  • 原文地址:https://www.cnblogs.com/Asumi/p/9703322.html
Copyright © 2011-2022 走看看