zoukankan      html  css  js  c++  java
  • A

     

     

    A - How Many Tables

    实现1代码:

     1 /***********************************************/
     2 #define set st
     3 int set[1006];
     4 int n,m;
     5 void join(int a,int b)
     6 {
     7     int fa=set[a];
     8     int fb=set[b];
     9     if(fa>fb) swap(fa,fb);
    10     for(int i=1;i<=n;i++)
    11     {
    12         if(set[i]==fb) set[i]=fa;
    13     }
    14 }
    15 
    16 int main()
    17 {
    18     int t;
    19     cin>>t;
    20     while(t--)
    21     {
    22         cin>>n>>m;
    23         for(int i=1;i<=n;i++) set[i]=i;
    24         int a,b;
    25         for(int i=1;i<=m;i++)
    26         {
    27             sc2(a,b);
    28             join(a,b);
    29         }
    30         int cur=0;
    31         int vis[1007];
    32         mem0(vis);
    33         for(int i=1;i<=n;i++){
    34             if(vis[set[i]]==0) {
    35                 cur++;
    36                 vis[set[i]]=1;
    37             }
    38         }
    39         cout<<cur<<endl;
    40     }
    41     return 0;
    42 }
    View Code

    实现2代码:(建成树)

     1 /***********************************************/
     2 #define set st
     3 int set[1006];
     4 int n,m;
     5 
     6 int find(int a)
     7 {//找a所在并查集的根 
     8     while(set[a]!=a)
     9     {
    10         a=set[a];
    11     }
    12     return a;
    13 }
    14 
    15 void join(int a,int b)
    16 {//将a和b所在的并查集合并 
    17     int fa=find(a);
    18     int fb=find(b);
    19     if(fa>fb) set[fa]=fb;
    20     else set[fb]=fa;
    21 }
    22 
    23 int main()
    24 {
    25     int t;
    26     cin>>t;
    27     while(t--)
    28     {
    29         cin>>n>>m;
    30         for(int i=1;i<=n;i++) set[i]=i;
    31         int a,b;
    32         for(int i=1;i<=m;i++)
    33         {
    34             sc2(a,b);
    35             join(a,b);//将a和b所在的并查集合并 
    36         }
    37         int ans=0;
    38         for(int i=1;i<=n;i++)
    39         {
    40             if(set[i]==i) ans++;
    41         }
    42         cout<<ans<<endl;
    43     }
    44     return 0;
    45 }
    View Code

    并查集

     

  • 相关阅读:
    《人月神话》阅读笔记(三)
    记账软件开发进度(六)
    记账软件开发进度(五)
    记账软件开发进度(四)
    《人月神话》阅读笔记(二)
    记账软件开发进度(三)
    package bufio
    Go语言:net/http包的使用模式和源码解析
    package http
    Golang系列中常用包
  • 原文地址:https://www.cnblogs.com/liuyongliu/p/10318447.html
Copyright © 2011-2022 走看看