1 条题解

  • 0
    @ 2026-8-7 17:50:54

    网络分组 · 293 · 公开题解

    思路

    每条边合并两个集合,最后统计不同根节点。

    复杂度

    近似 O((n+m)alpha(n))O((n+m)alpha(n)) 时间,O(n)O(n) 空间。

    易错点

    • 认真处理最小规模、重复值、不可达或全负数等边界。
    • 需要累加的题目优先使用 64 位整数。
    • 不要根据样例特判;隐藏数据包含随机、边界与退化结构。

    C++17 参考实现

    #include <bits/stdc++.h>
    using namespace std;
    int main(){int n,m,a,b;cin>>n>>m;vector<int>p(n+1);iota(p.begin(),p.end(),0);function<int(int)>f=[&](int x){return p[x]==x?x:p[x]=f(p[x]);};while(m--){cin>>a>>b;p[f(a)]=f(b);}set<int>s;for(int i=1;i<=n;i++)s.insert(f(i));cout<<s.size()<<'\n';}
    

    来源与授权

    • 题目与数据: 智链细米 IT 社区原创训练变体(components-0047)。
    • 知识路线参考: AlgoNote @ 2aa4fd0a2214代码随想录 @ b43def349578
    • 引用说明: 代码随想录作者为程序员 Carl;本题没有复制 LeetCode 或第三方竞赛题面、样例、题解与测试数据。
    • 授权记录: organizer-confirmed-2026-08-07。
    • 主办方: 智链细米 IT 社区;设备支持: EaglesLab。
    • 1

    信息

    ID
    994
    时间
    2000ms
    内存
    256MiB
    难度
    8
    标签
    递交数
    1
    已通过
    1
    上传者