网络分析(已解决)

using namespace std;
const int N = 1e4 + 10;
int p[N], s[N];
int find(int x)  // 并查集
{
    if(p[x]==x||p[p[x]] == p[x])return p[x];//当x的父节点为根节点或者x本身为根节点时,就不需要进行路径压缩,直接返回即可
    // 如果以上情况都不满足那么将x直接指向根节点,在指向之前父节点是直接指向根节点的(因为他是递归的),所以要把s[x]加上s[p[x]],这样才是x到根节点的权值
    int r = find(p[x]);
    s[x] += s[p[x]];
    p[x] = r;
    return r;
}
int main()
{
    int n, m;
    cin >>n >>m;
    for(int i = 1; i <= n; i ++)
    {
        p[i] = i;
    }
    while (m -- )
    {
        int t, a, b;
        cin >> t >>a >>b;
        if(t == 1)
        {
            a = find(p[a]), b =find(p[b]);
            if(find(a) != find(b)){
                s[find(a)] -= s[find(b)];
                p[find(a)] = find(b);
        }
        }
        else {
              s[find(a)] += b;
        }
    }
    for(int i = 1; i <= n; i ++)
    {
        if(find(i) == i)cout << s[i]<<" ";
        else {
            cout << s[i] + s[find(i)] << " ";
        }
    }
}
未解决 文章被收录于专栏

记录自己还有问题的题目

全部评论

相关推荐

秋招进行到现在终于能写总结了。完全没想到战线会拉这么长,过程会如此狼狈,不过更应该怪自己太菜了。好在所有的运气都用在了最后,也是有个去处。背景:双2本硕科班,无竞赛,本科一段研究所实习,硕士一段大厂暑期实习但无转正。技术栈是C++&nbsp;&amp;&nbsp;Golang,实习是客户端音视频(而且是鸿蒙端开发),简历两个C++项目一个Golang项目。主要投递岗位:后端,cpp软开,游戏服务端,测开,以及一些不拘泥于Java的岗位。从8月起总共投递123家公司,笔试数不清了,约面大约30家。offer/oc/意向:友塔游戏(第一个offer,面试体验很好,就是给钱好少南瑞继保(计算机科班点击就送(限男生),不...
乡土丁真真:佬很厉害,羡慕~虽然我还没有到校招的时候,也想讲一下自己的看法:我觉得不是CPP的问题,佬的背书双2,技术栈加了GO,有两段实习。投了123,面了30.拿到11个offer。这个数据已经很耀眼了。这不也是CPP带来的吗?当然也不止是CPP。至少来说在这个方向努力过的也会有好的结果和选择。同等学历和项目选java就会有更好的吗?我个人持疑问态度。当然CPP在方向选择上确实让人头大,但是我觉得能上岸,至于最后做什么方向,在我看来并不重要。至于CPP特殊,有岗位方向的随机性,java不是不挑方向,只是没得选而已。也希望自己以后校招的时候能offer满满
点赞 评论 收藏
分享
喜欢走神的孤勇者练习时长两年半:池是池,发是发,我曾池,我现黑
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务