博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU-1865 More is better
阅读量:6721 次
发布时间:2019-06-25

本文共 1396 字,大约阅读时间需要 4 分钟。

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

  代码如下:

#include 
#include
#include
#include
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; }

  

转载地址:http://nqcmo.baihongyu.com/

你可能感兴趣的文章
如何从Spotify Music中删除DRM?
查看>>
VR开发者为Labo VR辩护 预计这可能是任天堂进军VR的开始
查看>>
全面解析大数据框架Hadoop主要模块
查看>>
手写调用门
查看>>
海恩法则与墨菲定律
查看>>
linux RHEL 解决中文网页乱码和界面英文
查看>>
linux中oracle的日常维护命令
查看>>
Linux 修改IP地址和网关
查看>>
linux查看硬件信息
查看>>
apache http的源码编译
查看>>
find命令的参数
查看>>
H3C交换机配置镜像端口
查看>>
ESXI6.0(6.7)实践——惠普A6 7310主板,APU,Realtek网卡的安装之路
查看>>
我的友情链接
查看>>
26期学员参观森华易腾移动IDC机房有感
查看>>
三、一个简单的BDB JE例子
查看>>
在Windows Server2008R2安装Oracle Database 11g Release 2
查看>>
借助mysql和DNS view实现智能DNS(centos6.3 x64环境)
查看>>
维纳-辛钦 (Wiener–Khinchin) 定理
查看>>
修改mysql的数据库密码
查看>>