zoukankan      html  css  js  c++  java
  • POJ 3662 Telephone Lines(二分+最短路)

      查看题目

      最小化第K大值。    

      让我怀疑人生的一题目,我有这么笨?

     1 #include <cstdio>
     2 #include <queue>
     3 #include <cstring>
     4 #include <vector>
     5 #include <functional>
     6 using namespace std;
     7 #define maxv 1010
     8 #define maxl 1000000
     9 struct edge
    10 {
    11     int to, cost;
    12     edge(){}
    13     edge(int to, int cost) : to(to), cost(cost){}
    14 };
    15 typedef pair<int, int> P;
    16 vector<edge> G[maxv];
    17 int d[maxv];
    18 int V, E;
    19 int dij(int s, int x) {
    20     priority_queue<P, vector<P>, greater<P> > que;
    21     memset(d, 0X3f, V*sizeof(int));
    22     d[s] = 0;
    23     que.push(P(0, s));
    24     while (!que.empty()) {
    25        P p = que.top(); que.pop();
    26         int v = p.second;
    27         if (d[v] < p.first) continue;
    28         for (int i = 0; i < G[v].size(); ++i)
    29         {
    30             edge e = G[v][i];
    31             int new_d = d[v] + (e.cost >= x ? 1 : 0);
    32             if (d[e.to] > new_d)
    33             {
    34                 d[e.to] = new_d;
    35                 que.push(P(d[e.to], e.to));
    36             }
    37         }        
    38     }
    39     return d[V-1];
    40 }
    41 int main(void) {
    42     freopen("in.txt", "r", stdin);
    43     freopen("out.txt", "w", stdout);
    44     int K;
    45     scanf("%d%d%d", &V, &E, &K); 
    46     for (int i = 0; i < E; ++i) {
    47         int A, B, L;
    48         scanf("%d%d%d", &A, &B, &L);
    49         --A, --B;
    50         G[A].push_back(edge(B,L));
    51         G[B].push_back(edge(A,L));
    52     }
    53     int l = 0, u = maxl+9;
    54     for (;(u-l) > 1;) {
    55         int m = (u+l) >> 1;
    56         if (dij(0, m) > K) {
    57             l = m;
    58         } else {
    59             u = m;
    60         }
    61     }
    62     printf("%d
    ", (l>maxl ? -1 : l));
    63     return 0;
    64 }
    View Code
  • 相关阅读:
    ELK安装(ubuntu)
    Ubuntu18.04上安装java
    .net core跨平台的文件路径
    缺少vim
    docker进入容器
    docker删除名字为none的imgae
    Ubuntu18.04上安装Docker-Compose
    Java类的反射
    Java常用类(二) Scanner类和大数类
    Java常用类(一)Math类和Random类
  • 原文地址:https://www.cnblogs.com/zhaoyu1995/p/5790522.html
Copyright © 2011-2022 走看看