zoukankan      html  css  js  c++  java
  • HDU1865 More is better

      该题为简单的并查集应用,只要按要求把给定的关系合并起来,并在合并时遴选出最佳个数即可。

      代码如下:

    #include <cstdio>
    #include
    <cstring>
    #include
    <cstdlib>
    #include
    <cmath>
    using namespace std;

    int set[100005];
    int cnt[100005];
    int max;

    inline
    int find( int x )
    {
    return set[x]= x == set[x]? x: find( set[x] );
    }

    inline
    void merge( int x, int y )
    {
    int a= find( x ), b= find( y );
    if( a!= b )
    {
    cnt[b]
    += cnt[a];
    max
    = max > cnt[b]? max : cnt[b];
    set[a]= b;
    }
    }

    /*inline int read( int &d ){
    char ch;
    int flag= 1;
    while( ch= getchar(), ch== ' ' || ch== '\n' );
    if( ch== '-' ) { flag= -1; d= 0; }
    else{ d= ch- '0'; }
    while( ch= getchar(), ch>= '0' && ch<= '9' )
    d= d* 10+ ch- '0';
    return d *= flag;
    }
    */

    inline
    int read( int &t )
    {
    char c;
    while( c= getchar(), c< '0'|| c> '9' ) ;
    t
    = c- '0';
    while( c= getchar(), c>= '0'&& c<= '9' )
    {
    t
    = t* 10+ c- '0';
    }
    }

    int main()
    {
    int N, Mnum = 100000; // 实际数据不大
    while( scanf( "%d", &N )!= EOF )
    {
    max
    = 1;
    for( int i= 1; i<= Mnum; ++i )
    {
    set[i]= i;
    cnt[i]
    = 1;
    }
    for( int i= 1; i<= N; ++i )
    {
    int x, y;
    read( x ), read( y );
    merge( x, y );
    Mnum
    = Mnum> x? Mnum: x;
    Mnum
    = Mnum> y? Mnum: y;
    }
    printf(
    "%d\n", max );
    }
    return 0;
    }

      

  • 相关阅读:
    Mybatis配置文件
    maven添加镜像与常用配置
    互联网级微服务架构神器Duubo
    Mybatis入门
    SpringMVC文件下载与JSON格式
    SpringMVC拦截器与异常处理
    SpringMVC国际化与文件上传
    cinder
    horizon
    glance
  • 原文地址:https://www.cnblogs.com/Lyush/p/2143651.html
Copyright © 2011-2022 走看看