zoukankan      html  css  js  c++  java
  • HDU1856_More is better

    题目大意:         让你输入n,然后输入n组数据,表示a与b的关系,最后求出关系最多一组的个数。注意(a与b有关系,b与c有关系,那么a与c就有关系) 解题思路:         并查集,开一个结构体用来存储以当前节点为跟节点的数目,最后再历遍一次就可以得到最大值了。 吐吐槽:         有点儿蛋疼,遇到了2个疼疼的问题,本来这是一道模板题啊,唉,问题1:交这道题目的时候,一交TLE了,疼,没有改,再交,居然ac了,而且时间为600ms,这……瞬间斯巴达化~ 问题2:这个有点儿严重,我在程序里面一边算并查集的num,的时候,顺便求最大值,这样错,必须在最后从1->MAX历遍一遍求最大值,这是为毛?现在没时间,留着问题,明天慢慢啃吧。。
    #include
    using namespace std;
    const int MAX=10000005;
    typedef struct n
    {
    	int pre;
    	int num;
    	n(int a=1) :num(a) {}
    }N;
    
    N pe[MAX];
    int find(int x)
    {
    	int r=x,j;
    	while(pe[r].pre!=r)
    		r=pe[r].pre;
    	while(pe[x].pre!=r)
    	{
    		j=pe[x].pre;
    		pe[x].pre=r;
    		x=j;
    	}
    	return r;
    }
    //int find(int x)//查
    //{
    //    if(x!=pe[x].pre)
    //    {
    //        pe[x].pre=find(pe[x].pre);
    //    }//回溯
    //    return pe[x].pre;
    //}
    void init()
    {
    	for(int i=0;i>n)
    	{
    		init();
    		int max=-1; 
    		for(i=1;i<=n;i++)
    		{
    			cin>>a>>b;
    			int f1=find(a);
    			int f2=find(b);
    			if(f1!=f2)
    			{
    				pe[f2].pre=f1;
    				pe[f1].num+=pe[f2].num;
    			}
    		/*	if(pe[f1].num>max)//为什么不能这样求最大值,还是搞不懂
    				max=pe[f1].num;*/
    		}
    		for(i=1;imax)
    				max=pe[i].num;
    		}
    		cout<
  • 相关阅读:
    luogu P3368 【模板】树状数组 2
    dp
    vijos 羽毛
    luogu tyvj 纪念品分组
    codevs 1259 最大正方形子矩阵 WD
    python 序列化之pickle模块 json模块
    python 类的进阶
    python 面向对象与类的基本知识
    python 异常处理
    python time模块 sys模块 collections模块 random模块 os模块 序列化 datetime模块
  • 原文地址:https://www.cnblogs.com/cchun/p/2520179.html
Copyright © 2011-2022 走看看