```cpp
int getfa(int x)
{
if(fa[x]==x)return x;
int t=getfa(fa[x]);
dis[x]+=dis[fa[x]];
return fa[x]=t;
}
```
by wuzhaoxin @ 2018-10-19 21:34:36
@[wuzhaoxin](/space/show?uid=70310) 请问这样做的理由是什么
by Ruff @ 2018-10-19 21:35:49
```cpp
void merge(int x,int y)
{
x=getfa(x),y=getfa(y);
fa[x]=y;
dis[x]=size[y];
size[y]+=size[x];
}
```
by wuzhaoxin @ 2018-10-19 21:35:59
@[wuzhaoxin](/space/show?uid=70310) 一直想不通
by Ruff @ 2018-10-19 21:36:00
在父节点路径压缩之前父节点的**dis**是错的
by wuzhaoxin @ 2018-10-19 21:37:57