zoukankan      html  css  js  c++  java
  • <hdu

      本题链接http://acm.hdu.edu.cn/showproblem.php?pid=1232

     结题思路:因为题目是汉语的,那我就不解释题意了,要求的是最少建设的道路,我们可以用并查集来做这道题,因为并查集上的数字和下标都是相连的。题目只需要求没有相连的(i == father[i])即可。

     注意细节:本题说是从1到N开始计数(虽然测试答案是对的,就是过不了)、输入的时候注意最后只是输入一个0就结束了,所以M和N要分开输,即输入N为0的时候。

     我的代码:(因为是模板题,建议码友自己写一遍,代码仅供参考):

     1 #include <iostream>
     2 #define maxn 10000
     3 using namespace std;
     4 int par[maxn];
     5 
     6 void init (int n) {
     7     for (int i = 1; i <= n; ++i) //从1到N编号
     8         par[i] = i;
     9 }
    10 
    11 int find(int x) {        //查找
    12     while(par[x] != x)
    13         x = par[x];
    14     return x;
    15 }
    16 
    17 void unite (int x, int y) {        //合并函数
    18     int fx = find (x), fy = find (y);
    19     if (fx != fy)
    20         par[fx] = fy;
    21 }
    22 
    23 int main () {
    24     int m, n;
    25     int a, b;
    26     while (cin >> m && m ) {//注意当输入一个0 的时候就停止
    27         cin >> n;
    28         init (m);
    29         for (int i = 1; i <= n; ++i) {
    30             cin >> a >> b;
    31             unite (a, b);
    32         }
    33         int t = 0;
    34         for (int i = 1; i <= m; ++i) {        //求独立的点
    35             if (par[i] == i)
    36                 t ++;
    37         }
    38         cout << t - 1 << endl;
    39     }
    40     return 0;
    41 }
    View Code

      欢迎码友评论,一起成长。

  • 相关阅读:
    HDU 5495:LCS
    关于使用了cudaMallocHost之后发生 segment fault的原因
    关于grub 损坏的问题
    LightOJ
    LightOJ
    poj3268--Silver Cow Party (最短路+技巧)
    hdoj1443--Joseph (约瑟夫环)
    poj2549--Sumsets (sum)
    UVA11080
    hdoj1548--A strange lift(bfs.)
  • 原文地址:https://www.cnblogs.com/Ddlm2wxm/p/5718665.html
Copyright © 2011-2022 走看看