带权并查集模板

题目:

题目描述
一个整数序列A{a0,a1,a2,....an-1},执行下列的操作:

  1. relate(x,y,z)表示ay比ax大z
  2. diff(x,y)打印输出ay-ax

输入

输出
打印操作输出值

样例输入
5 6
0 0 2 5
0 1 2 3
1 0 1
1 1 3
0 1 4 8
1 0 4

样例输出
2
?
10

code:

#include<cstdio>
using namespace std;
int fa[100005],val[100005];
int find(int x)
{
    if(fa[x]!=x)
    {
        int t=fa[x];
        fa[x]=find(fa[x]);
        val[x]+=val[t];
    }
    return fa[x];
}
int main()
{
    int n,q,tmp;
    scanf("%d%d",&n,&q);
    int pd,x,y,z;
    for(int i=0;i<n;i++)fa[i]=i;
    for(int i=1;i<=q;i++)
    {
        scanf("%d%d%d",&pd,&x,&y);
        if(pd==0)
        {
            scanf("%d",&z);
            int px=find(x);
            int py=find(y);
            if(px!=py)
            {
                fa[px]=py;
                val[px]=val[y]-val[x]+z;//注意这里的x,y和px之间的区别,不要弄混
            }
        }
        else
        if(pd==1)
        {
            if(find(x)!=find(y))
            {
                printf("?\n");
            }
            else
            printf("%d\n",val[x]-val[y]);
        }
    }
    return 0;
} 
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-24 13:39
在记录秋招的大魔王很...:别被忽悠了,我做了多年销售。我可以告诉你,这就是忽悠你的,销售一定要看底薪也要看提成两者不可缺一。提成是有业绩的时候才拿的到的,谁能保证一直有单状态都好。销售有时候很讲究运气的。底薪是你这个人这个岗位日常工作体现的价值。别小看底薪,你看那些跳槽去做经理主管的,底薪底一些,人家愿意去吗?所以那些说销售靠提成的纯属忽悠,除非他们的业务很容易成单。
点赞 评论 收藏
分享
屌丝逆袭咸鱼计划:心态摆好,man,晚点找早点找到最后都是为了提升自己好进正职,努力提升自己才是最关键的😤难道说现在找不到找的太晚了就炸了可以鸡鸡了吗😤早实习晚实习不都是为了以后多积累,大四学长有的秋招进的也不妨碍有的春招进,人生就这样
点赞 评论 收藏
分享
苍蓝星上艾露:这简历。。。可以试试我写的开源简历优化工具https://github.com/weicanie/prisma-ai
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务