方法1
int f(int x)
{
return a[x];
}
void get(int u,int v)
{
int i = u > v ? u : v ;
int j = u < v ? u : v ;
for(int k = 1 ; k <= N ; k++)
if(a[k] == i)
a[k] = j ;
}
方法2
int f(int x)
{
while(x != a[x])
x = a[x] ;
return x ;
}
void get(int u,int v)
{
if(u < v)
a[v] = u ;
else
a[u] = v ;
}
路径压缩 1
int f(int x)
{
if(x != a[x])
a[x] = f(a[x]);
return a[x];
}
路径压缩 2
int f(int x)
{
int r , k , l ;
r = x ;
while(r != a[r])
r = a[r] ;
k = x ;
while(k != r)
{
l = a[k] ;
a[k] = r ;
k = l ;
}
return r;
}
寒假训练--并查集
最新推荐文章于 2024-01-20 13:51:17 发布