zoukankan      html  css  js  c++  java
  • 道路建设

    链接:https://www.nowcoder.net/acm/contest/76/B
    来源:牛客网

    道路建设
    时间限制:C/C++ 1秒,其他语言2秒
    空间限制:C/C++ 65536K,其他语言131072K
    64bit IO Format: %lld

    题目描述

    随着如今社会的不断变化,交通问题也变得越来越重要,所以市长决定建设一些公路来方便各个城市之间的贸易和交易。虽然市长的想法很好,但是他也遇到了一般人也经常头疼的问题,那就是手头的经费有限……在规划过程中,设计师们已经预算出部分城市之间建设公路的经费需求。现在市长想知道,它能不能将他的m个城市在有限的经费内实现公路交通。如果可以的话,输出Yes,否则输出No(两个城市不一定要直接的公路相连,间接公路到达也可以。)

    输入描述:

    测试输入包含多条测试数据
    每个测试数据的第1行分别给出可用的经费c(<1000000),道路数目n(n<10000),以及城市数目m(<100)。
    接下来的n行给出建立公路的成本信息,每行给出三个整数,分别是相连的两个城市v1、v2(0<v1,v2<=m)以及建设公路所需的成本h(h<100)。

    输出描述:

    对每个测试用例,输出Yes或No。
    示例1

    输入

    20 10 5
    1 2 6
    1 3 3
    1 4 4
    1 5 5
    2 3 7
    2 4 7
    2 5 8
    3 4 6
    3 5 9
    4 5 2

    输出

    Yes
    示例2

    输入

    10 2 2
    1 2 5
    1 2 15

    输出

    Yes

    备注:

    两个城市之间可能存在多条线路
     1 #include <iostream>
     2 #include <cstring>
     3 #include <string>
     4 #include <algorithm>
     5 #include <queue>
     6 using namespace std;
     7 long long c;
     8 int n, m;
     9 struct node
    10 {
    11     int u, v;
    12     long long w;
    13     friend bool operator<(node a, node b)
    14     {
    15         return a.w > b.w;
    16     }
    17 }e[10005];
    18 int par[105];
    19 int rak[105];
    20 priority_queue<node>q;
    21 void init()
    22 {
    23     int i;
    24     while (!q.empty()) q.pop();
    25     for (i = 1; i <= n; i++)
    26     {
    27         par[i] = i;
    28         rak[i] = 1;
    29     }
    30 }
    31 int find(int x)
    32 {
    33     if (par[x] == x) return x;
    34     else return par[x] = find(par[x]);
    35 }
    36 void unite(int xx, int yy)
    37 {
    38     int x = find(xx);
    39     int y = find(yy);
    40     if (x == y) return;
    41     else
    42     {
    43         if (rak[x] < rak[y])
    44         {
    45             par[x] = y;
    46         }
    47         else
    48         {
    49             par[y] = x;
    50             if (rak[x] == rak[y])
    51             {
    52                 rak[x]++;
    53             }
    54         }
    55     }
    56 }
    57 int main()
    58 {
    59     while (cin >> c >> m >> n)
    60     {
    61         init();
    62         int i;
    63         for (i = 1; i <= m; i++)
    64         {
    65             cin >> e[i].u >> e[i].v >> e[i].w;
    66             q.push(e[i]);
    67         }
    68         long long s = 0;
    69         int k = 0;
    70         while (!q.empty())
    71         {
    72             node x = q.top();
    73             q.pop();
    74             if (find(x.u) != find(x.v))
    75             {
    76                 unite(x.u, x.v);
    77                 s += x.w;
    78                 k++;
    79             }
    80             if (k == n - 1) break;
    81         }
    82         if (s <= c) cout << "Yes" << endl;
    83         else cout << "No" << endl;
    84     }
    85     return 0;
    86 }
  • 相关阅读:
    [硬件]_ELVE_VS2015下opencv3.3的配置问题
    [Linux]_ELVE_ssh登录远程阿里服务器
    [python]_ELVE_pip2和pip3如何共存
    U盘无法打开提示格式化?如何进行恢复
    [转]pycharm的一些快捷键
    文件上传Django
    ansible编译安装--操作系统环境Redhat6.4
    django的models字段介绍
    paramiko模块
    mysql安装等操作
  • 原文地址:https://www.cnblogs.com/caiyishuai/p/13271232.html
Copyright © 2011-2022 走看看