zoukankan      html  css  js  c++  java
  • (step5.1.5)hdu 1856(More is better——DFS)

    题目大意:输入一个整数n,表示有n对朋友,接下来给出n对朋友。。。输出最大的集合中的人数(即,秋季喝的最大的秩)


    解题思路:并查集

    1)按秩的大小来插。即

    if( fx != fy){
    		//这里根据秩的大小来插入
    		if(rank[fx] > rank[fy]){
    			rank[fx] += rank[fy];
    			father[fy] = fx;
    		}else{
    			rank[fy] += rank[fx];
    			father[fx] = fy;
    		}
    	}


    2)需要求出秩的最大值

    int max = -1;
    		for( i = 1 ; i<= 10000001 ; ++i){
    			if(rank[i] > max){
    				max = rank[i];
    			}
    		}



    代码如下:

    /*
     * 1856_2.cpp
     *
     *  Created on: 2013年8月23日
     *      Author: Administrator
     */
    
    
    #include <iostream>
    
    using namespace std;
    
    /**
     * father[i] :用来保存当前节点的父亲节点
     * rank[i] :用来保存当前节点的秩(即当前节点包含了多少节点)
     *
     */
    int father[10000001];
    int rank[10000001];
    
    int find(int a){
    	if( a == father[a]){
    		return a;
    	}
    
         father[a] = find(father[a]);
         return father[a];
    }
    
    void join(int x , int y){
    	int fx = find(x);
    	int fy = find(y);
    
    	if( fx != fy){
    		//这里根据秩的大小来插入
    		if(rank[fx] > rank[fy]){
    			rank[fx] += rank[fy];
    			father[fy] = fx;
    		}else{
    			rank[fy] += rank[fx];
    			father[fx] = fy;
    		}
    	}
    }
    
    void make_set(){
    	int i;
    	for( i = 1 ; i<= 10000001 ; ++i){
    		father[i] = i;
    		rank[i] = 1;
    	}
    }
    
    
    int main(){
    	int n;
    	while(scanf("%d",&n)!=EOF){
    		memset(rank,0,sizeof(rank));
    		memset(father,0,sizeof(father));
    		make_set();
    		int i;
    		for( i = 1 ; i <= n ; ++i ){
    			int a,b;
    			scanf("%d%d",&a,&b);
    			join(a,b);
    		}
    
    		//以下代码用来求秩的最大值
    		int max = -1;
    		for( i = 1 ; i<= 10000001 ; ++i){
    			if(rank[i] > max){
    				max = rank[i];
    			}
    		}
    		printf("%d
    ",max);
    	}
    }
    
    
    



  • 相关阅读:
    Java反射在Android中的使用
    配置adb环境变量
    Android Studio 生成Release版,报Warning的解决办法
    Android Studio导入System Library步骤
    Windows 10 Java环境变量配置
    做一个有内涵的程序猿
    简述Python2与Python3的区别
    对不起,您输入的内容不合法
    python的数据类型
    python三器——装饰器/迭代器/生成器
  • 原文地址:https://www.cnblogs.com/bbsno1/p/3279929.html
Copyright © 2011-2022 走看看