首页 > 编程语言 >2024“钉耙编程”中国大学生算法设计超级联赛(8)1006 cats 的最小生成树

2024“钉耙编程”中国大学生算法设计超级联赛(8)1006 cats 的最小生成树

时间:2024-08-14 13:29:36浏览次数:14  
标签:钉耙 vector int 查集 第几次 2024 fa cats 操作

题目大意 :给出有\(n\)个点\(m\)条边的图,接下来进行若干次操作,每次操作取出当前图的最小生成树,然后删去这些构成最小生成树的边,知道该图不连通,输出每条边在第几次操作时被删除
思路 :由于构成最小生成树的边数是\(n-1\)条边,所以最多操作次数为\(\lfloor \frac{m}{n-1} \rfloor\),每次操作都会有一个并查集(kruskal)所以创建\(\lfloor \frac{m}{n-1} \rfloor\)个并查集,从小到大遍历所有的边,看看属于哪个并查集,即在第几次被删除,找到的第一个不连通的并查集即为该边所在的并查集,找到后将这个边插入该并查集,即将\(u\),\(v\)合并(同祖先),并将该并查集操作次数+1。操作完后访问所有的边,判断其所在并查集是否操作了\(n-1\)次,如果为否输出-1,否侧输出该边属于第几个并查集(该边第几次删除)

#include <bits/stdc++.h>  
  
  
const double eps = 1e-6;  
using namespace std;  
  
const int N = 1e5 + 10;  
const int M = 5e4 + 10;  
  
#define int  long long  
  
struct node {  
    int u, v, val;  
};  
  
  
void solve() {  
    int n, m;  
    cin >> n >> m;  
    vector<vector<int> > fa(m / (n - 1) + 1, vector<int>(n + 1));  
    vector<node> E(m + 1);  
    vector<int> ans(m + 1), cnt(m + 1);  
    function<int(int, int)> findf = [&](int x, int c) -> int {  
        if (fa[c][x] == x) return x;  
        else return fa[c][x] = findf(fa[c][x], c);  
    };  
    for (int j = 0; j <= (m / (n - 1)); j++) {  
        for (int i = 1; i <= n; i++) {  
            fa[j][i] = i;  
            //cout<<"fa[" << j <<"]["<<i << "]="<<fa[j][i]<<'\n';  
        }  
    }  
    //cout << fa[1][1] << '\n';  
    for (int i = 1; i <= m; i++) {  
        int u, v;  
        cin >> u >> v;  
        E[i] = {u, v, i};  
    }  
    for (int i = 1; i <= m; i++) {  
        auto [u, v, w] = E[i];  
        int l = 1, r = m / (n - 1);  
        int idx = -1;  
        while (l <= r) {  
            int mid = (l + r) >> 1;  
            //cout << findf(u, mid) << ' ' << findf(v, mid) << '\n';  
            if (findf(u, mid) == findf(v, mid)) {  
                l = mid + 1;  
            } else {  
                idx = mid;  
                r = mid - 1;  
            }  
        }  
        if (idx != -1) {  
            fa[idx][findf(u, idx)] = findf(v, idx);  
            cnt[idx]++;  
        }  
        ans[i] = idx;  
    }  
    for (int i = 1; i <= m; i++) {  
        if (ans[i] == -1) cout << -1;  
        else if (ans[i] == m / (n - 1) + 1 || cnt[ans[i]] != n - 1) cout << "-1";  
        else cout << ans[i];  
        cout << ' ';  
    }  
    cout << '\n';  
}  
  
signed main() {  
    ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);  
    int _ = 1;  
    cin >> _;  
    while (_--) solve();  
}

标签:钉耙,vector,int,查集,第几次,2024,fa,cats,操作
From: https://www.cnblogs.com/yoez123/p/18358766

相关文章

  • IntelliJ IDEA【最新】2024终极版 下载安装教程,图文步骤详解
    文章目录软件介绍软件下载安装步骤ActivationMethod专栏推荐:超多精品软件(持续更新中…)软件介绍IntelliJIDEA是一款由JetBrains公司开发的集成开发环境(IDE),专为软件开发人员设计,尤其在Java编程领域享有极高的声誉,被认为是市场上最好的JavaIDE之一。以下是对In......
  • 2024年8月中国数据库排行榜:OceanBase攀升再夺冠,达梦跃入三甲关
    在这个炽热的季节,随着巴黎奥运会的盛大开幕,全球将目光聚集在了体育的无限魅力和竞技的巅峰对决上。如同奥运赛场上的激烈角逐,中国数据库界也上演着一场技术与创新的较量,各个数据库产品正在中国乃至全球舞台上展示着它们的实力和潜力。现在让我们共同盘点本月墨天轮社区中国数据库......
  • 2024-08-14:用go语言,给定两个长度分别为n和m的整数数组nums和changeIndices,下标从1开始
    2024-08-14:用go语言,给定两个长度分别为n和m的整数数组nums和changeIndices,下标从1开始。初始时,nums中所有下标均未标记。从第1秒到第m秒,每秒可以选择以下四种操作之一:1.选择范围[1,n]中一个下标i,将nums[i]减少1。2.将nums[changeIndices[s]]设为任意非负整数。3.选择范围......
  • CentOS 7 停服后(2024-06-30)升级最新的Linux 内核
     1、CentOS7更新 USTC的源sudosed-i.bak\-e's|^mirrorlist=|#mirrorlist=|g'\-e's|^#baseurl=http://mirror.centos.org/centos|baseurl=https://mirrors.ustc.edu.cn/centos-vault/centos|g'\/etc/yum.repos.d/CentOS-Base.repo 2......
  • DeiT-LT:印度科学院提出针对长尾数据的`DeiT`升级模型 | CVPR 2024
    DeiT-LT为ViT在长尾数据集上的应用,通过蒸馏DIST标记引入CNN知识,以及使用分布外图像并重新加权蒸馏损失来增强对尾类的关注。此外,为了减轻过拟合,论文建议用经过SAM训练的CNN教师进行蒸馏,促使所有ViT块中DIST标记学习低秩泛化特征。经过DeiT-LT的训练方案,DIST标记成为尾类的专家,分......
  • StarNet:关于 Element-wise Multiplication 的高性能解释研究 | CVPR 2024
    论文揭示了staroperation(元素乘法)在无需加宽网络下,将输入映射到高维非线性特征空间的能力。基于此提出了StarNet,在紧凑的网络结构和较低的能耗下展示了令人印象深刻的性能和低延迟来源:晓飞的算法工程笔记公众号论文:RewritetheStars论文地址:https://arxiv.org/abs/240......
  • H7-TOOL混合脱机烧录以及1拖4不同的通道烧录不同的程序操作说明(2024-08-07)
     【应用场景】原本TOOL的1拖4是用于同时烧录相同程序给目标板,但有时候一个板子上有多个不同的MCU,客户希望仅通过一个TOOL就可以完成对板子上多个MCU的烧录,也就是1拖4不同的通道烧录不同的程序,此贴为此制作。【实验目标】由于这个属于定制需求,需要简单修下目标文件,后面升......
  • [权威出版|稳定检索]2024年航空航天、机械与控制工程国际会议(AMCE 2024)
    2024年航空航天、机械与控制工程国际会议2024InternationalConferenceonAerospace,MechanicalandControlEngineering【1】大会信息会议名称:2024年航空航天、机械与控制工程国际会议会议简称:AMCE2024大会时间:请查看官网大会地点:中国·温州截稿时间:请查看官网......
  • 高危漏洞CVE-2024-38077的修复指南
    “根据2024年8月9日,国家信息安全漏洞共享平台(CNVD)收录了Windows远程桌面许可服务远程代码执行漏洞(CNVD-2024-34918,对应CVE-2024-38077)。未经身份认证的攻击者可利用漏洞远程执行代码,获取服务器控制权限。目前,该漏洞的部分技术原理和概念验证伪代码已公开,厂商已发布安......
  • 2024牛客多校7&8
    7通读题解之后决定把能看懂的题目补了(毕竟能看懂的也不多,某些算法听都没听过QwQ)AMaximumSubarraySum(A)(出题人解法没看明白)解法2的切入点类似之前某场div2的D题(题解传送门),将操作过程视为选出\(\lfloorn/k\rfloor\)个长度为\(k\)的子序列,答案序列中大于\(k\)的部分......