zoukankan      html  css  js  c++  java
  • 并查集

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    int N, M, set[1010];
    int find ( int x ) {
        return x==set[x]?x:set[x]= find ( set[x] );   
    }
    void Union ( int x, int y ) {
         int a = find (x), b = find(y);
         if ( a != b ) {
              set[a] =  b;    
         }    
    }
    int main () {
         int a, b, x, y, sum;
        
         while ( scanf ( "%d%d", &N, &M ), N!=0 ) {
                for ( int i = 1; i <= N; i++ )
                    set[i] = i;
                for ( int i = 1; i <= M; i++ ) {
                    scanf ( "%d%d", &a ,&b);
                    x = find (a), y = find(b);
                    if ( x!=y)
                        Union ( a, b );
                }
                sum = -1;
                for ( int i = 1; i <= N; i++ ) {
                    if ( set[i] == i )  sum++;  
                }
                printf ( "%d\n", sum );
         }
         return 0;  
    }
  • 相关阅读:
    CF1066E Binary Numbers AND Sum
    CF1063B Labyrinth
    CF1063A Oh Those Palindromes
    CF1066C Books Queries
    CF1060D Social Circles
    CF1059C Sequence Transformation
    CF1059B Forgery
    CF1060C Maximum Subrectangle
    【LYOI2016】EasyRound1
    【bzoj2242】计算器
  • 原文地址:https://www.cnblogs.com/QQbai/p/2135280.html
Copyright © 2011-2022 走看看