zoukankan      html  css  js  c++  java
  • 并查集(题目)

    A.hdu1232畅通工程

     1 #include<cstdio>
     2 using namespace std;
     3 
     4 int f[10086];
     5 
     6 int find(int v) {
     7     if (f[v] == v)    return v;//如果父节点为自己则返回其本身
     8     return f[v] = find(f[v]);//函数的递归调用如果不是本身则返回为找到的父节点
     9 }
    10 
    11 void unit(int x, int y) {
    12     //函数实现把两个子集结合
    13     int t1 = find(x);
    14     int t2 = find(y);
    15     if (t1 != t2)    f[t2] = t1;//如果两子集的父节点不同则实现把t2集合的最终老大改为t1
    16 }
    17 int main()
    18 {
    19     int m, n,x,y;
    20     while (-scanf("%d",&n),n)
    21     {
    22         for (int i = 0; i <= n; i++)    f[i] = i;//让所有的元素认自己为老大
    23         scanf("%d", &m);
    24         for (int i = 0; i < m; i++) {
    25             scanf("%d%d", &x, &y);
    26             unit(x, y);
    27         }
    28         int ans = 0;//该题目的答案
    29         for (int i = 1; i <= n; i++)    if (i == f[i])    ans++;//如果节点和父节点是本身在联合之后的情况下:证明这个节点是该子集的最高节点并且从该子集引一一条即可使两者联通,减一的思想则是假设有两个元素两者都已连通但是此时ans是1,应该减一因为此时不需要再修路
    30         printf("%d
    ", ans - 1);
    31     }
    32     return 0;
    33 }
    作者:LightAc
    出处:https://www.cnblogs.com/lightac/
    联系:
    Email: dzz@stu.ouc.edu.cn
    QQ: 1171613053
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    pandas属性和方法
    os模块常用方法
    读/写xlsx文件
    读/写docx文件
    文件基本用法
    jieba.lcut方法
    移动端设置input属性disabled样式
    移动端日期选择,下拉框选择效果
    css背景色渐变代码
    拖动div元素
  • 原文地址:https://www.cnblogs.com/lightac/p/10534729.html
Copyright © 2011-2022 走看看