LA 3027 合作网络 并查集

题目链接:

https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1028

比较简单,用数组d[i]表示结点i和祖先结点的距离,查询时压缩路径并更新d[]数组。

刘汝佳大白书(P193):

贴代码:

 #include<cstdio>
#include<algorithm>
const int N = ;
int pa[N],d[N];
int findset(int x)
{
if(pa[x] == -) return x;
else
{
int root = findset(pa[x]);
d[x] += d[pa[x]];
return pa[x] = root;
}
}
int main()
{
// freopen("in.txt","r",stdin);
int t,n,u,v;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
char s[];
for(int i=; i<=n; ++i) pa[i]=-,d[i]=;
while(scanf("%s",s),s[] != 'O')
{
if(s[] == 'E')
{
scanf("%d",&u);
findset(u);
printf("%d\n",d[u]);
}
else
{
scanf("%d%d",&u,&v);
pa[u] = v;
d[u] = abs(u-v)%;
}
}
}
return ;
}
上一篇:【项目 · Wonderland】需求规格说明书 · 终版


下一篇:AMD and CMD are dead之KMDjs内核之依赖分析