• P2330-[SCOI2005]繁忙的都市


     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 #define pb push_back
     4 #define _for(i,a,b) for(int i = (a);i < (b);i ++)
     5 #define INF 100000003
     6 #define ll long long
     7 inline ll read()
     8 {
     9     ll ans = 0;
    10     char ch = getchar(), last = ' ';
    11     while(!isdigit(ch)) last = ch, ch = getchar();
    12     while(isdigit(ch)) ans = (ans << 1) + (ans << 3) + ch - '0', ch = getchar();
    13     if(last == '-') ans = -ans;
    14     return ans;
    15 }
    16 inline void write(ll x)
    17 {
    18     if(x < 0) x = -x, putchar('-');
    19     if(x >= 10) write(x / 10);
    20     putchar(x % 10 + '0');
    21 }
    22 int n;
    23 int mincost[303];
    24 bool used[303];
    25 struct edge
    26 {
    27     int to,cost;
    28 };
    29 vector<edge> G[303];
    30 int V,E;
    31 int maxx = 0;
    32 int minn = INF;
    33 int MST(int K)
    34 {
    35     _for(i,1,V+1)
    36     {
    37         mincost[i] = INF;
    38         used[i] = false;
    39     }
    40 
    41     mincost[1] = 0;
    42     int res = 0;
    43 
    44     while(1)
    45     {
    46         int v = -1;
    47         _for(u,1,V+1)
    48         if(!used[u] && (v==-1 || mincost[u] < mincost[v]))
    49             v = u;
    50         
    51         if(v==-1) break;
    52         used[v] = true;
    53         res += mincost[v];
    54 
    55         _for(u,0,G[v].size())
    56             if(G[v][u].cost<=K)
    57                 mincost[G[v][u].to] = min(mincost[G[v][u].to],G[v][u].cost);
    58     }
    59     return res;
    60 }
    61 bool C(int d)
    62 {
    63     if(MST(d)>=INF)
    64         return false;
    65     return true;
    66 }
    67 int solve()
    68 {
    69     int lb = minn,ub = maxx;
    70     while(ub - lb > 1)
    71     {
    72         int mid =  lb+(ub-lb)/2;
    73         if(C(mid)) ub = mid;
    74         else lb = mid;
    75     }
    76 
    77     if(!C(lb))
    78         return lb+1;
    79     return lb;
    80 }
    81 
    82 int main()
    83 {
    84     V = read(),E = read();
    85     _for(i,0,E)
    86     {
    87         int a,b,c;
    88         a = read(),b = read(), c = read();
    89         G[a].push_back({b,c});
    90         G[b].push_back({a,c});
    91         maxx = max(maxx,c);
    92         minn = min(minn,c);
    93     }
    94 
    95     int rnt = solve();
    96     printf("%d %d",V-1,rnt);
    97     return 0;
    98 }
  • 相关阅读:
    vue单页面
    禁止系统默认右键并执行自己的程序
    jquery-ui拖动
    jquery鼠标右键功能 备忘
    日历插件 备忘
    兼容于苹果手机的点击方法
    js判断设备访问入口
    微信小程序点击显示某个view
    微信小程序数量减
    点外层div关闭,点里层不关闭
  • 原文地址:https://www.cnblogs.com/Asurudo/p/11523242.html
Copyright © 2020-2023  润新知