#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<
题目大意: 让你输入n,然后输入n组数据,表示a与b的关系,最后求出关系最多一组的个数。注意(a与b有关系,b与c有关系,那么a与c就有关系) 解题思路: 并查集,开一个结构体用来存储以当前节点为跟节点的数目,最后再历遍一次就可以得到最大值了。 吐吐槽: 有点儿蛋疼,遇到了2个疼疼的问题,本来这是一道模板题啊,唉,问题1:交这道题目的时候,一交TLE了,疼,没有改,再交,居然ac了,而且时间为600ms,这……瞬间斯巴达化~ 问题2:这个有点儿严重,我在程序里面一边算并查集的num,的时候,顺便求最大值,这样错,必须在最后从1->MAX历遍一遍求最大值,这是为毛?现在没时间,留着问题,明天慢慢啃吧。。
转载于:https://www.cnblogs.com/cchun/archive/2011/11/09/2520179.html