P3623 免费道路 - Kruskal

news/2025/11/10 15:18:59/文章来源:https://www.cnblogs.com/jiu-wei-lwj/p/19207135

P3623 免费道路 - Kruskal

P3623 免费道路

题意

给定无向图及其权值 \(0/1\),求权值和为 \(n-k-1\) 的生成树。

思路

令鹅卵石为 \(1\),则为求权值和为 \(k\) 的生成树。分类讨论后易得有些权值为一的边不能不放,他们关乎图的联通性。所以我们先求出这些边,即先作一遍边权为 \(0\) 的生成树,然后求出必须的权为 \(1\) 的边。

然后的权为 \(1\) 的边就可一随意摆放,即在必须的 \(1\) 填上后,再将边权和填到 \(k\),最后用 \(0\) 边保证图联通。

无解的情况:

  1. 边权和小于 \(k\)
  2. 边权和等于 \(k\),但图不连通。
  3. 边权和大于 \(k\),但图连通。

Code

#include <bits/stdc++.h>
#define int long long
using namespace std;
constexpr int maxn = 2e4+10;
constexpr int maxm = 1e5+10;
constexpr int INF = 0x3f3f3f3f3f3f3f3f;typedef struct edge
{int x,y,w;
}edge;int n,m,k;
edge edges1[maxm];// erluan shi
edge edges0[maxm];// shuini
int id0,id1,idx;
edge need[maxn];int fa[maxn];void init()
{for(int i=1;i<=n;++i){fa[i]=i;}
}int finr(int x)
{return fa[x]==x ? x : fa[x]=finr(fa[x]);
}bool kruskal1()// 找出必须的鹅卵石路
{init();int cnt=0;for(int i=1;i<=id0;++i){int xr=finr(edges0[i].x);int yr=finr(edges0[i].y);if(xr!=yr){++cnt;fa[xr]=yr;}if(cnt>=n-1){break;}}for(int i=1;i<=id1;++i){int xr=finr(edges1[i].x);int yr=finr(edges1[i].y);if(xr!=yr){++cnt;fa[xr]=yr;need[++idx]=edges1[i];edges1[i].w=-1;}if(cnt>=n-1){break;}}if(cnt<n-1 || idx>k){return 0;}return 1;
}bool kruskal2()
{init();int cnt1=0;int cnt=0;for(int i=1;i<=idx;++i){int xr=finr(need[i].x);int yr=finr(need[i].y);if(xr!=yr){++cnt1;++cnt;fa[xr]=yr;}}for(int i=1;i<=id1 && cnt1<k;++i){if(edges1[i].w==-1){continue;}int xr=finr(edges1[i].x);int yr=finr(edges1[i].y);if(xr!=yr){++cnt1;++cnt;fa[xr]=yr;need[++idx]=edges1[i];}}for(int i=1;i<=id0;++i){int xr=finr(edges0[i].x);int yr=finr(edges0[i].y);if(xr!=yr){++cnt;fa[xr]=yr;need[++idx]=edges0[i];}if(cnt>=n-1){break;}}if(cnt!=n-1 || cnt1!=k){return 0;}return 1;
}signed main()
{#ifndef ONLINE_JUDGEfreopen("cjdl.in","r",stdin);freopen("cjdl.out","w",stdout);#endif // ONLINE_JUDGEscanf("%lld%lld%lld",&n,&m,&k);for(int i=1,x,y,w ;i<=m;++i){scanf("%lld%lld%lld",&x,&y,&w);if(w){edges0[++id0]={x,y,0};}else{edges1[++id1]={x,y,1};}}if(!kruskal1()){printf("no solution\n");return 0;}if(!kruskal2()){printf("no solution\n");return 0;}else{for(int i=1;i<=idx;++i){printf("%lld %lld %lld\n",need[i].x,need[i].y,need[i].w^1);}}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/961446.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年11月安徽合肥正规的除甲醛平台推荐排行榜单

文章摘要 随着室内空气质量问题日益受到关注,除甲醛服务行业在2025年迎来快速发展。本文基于市场调研和用户反馈,为您呈现安徽合肥地区最专业的除甲醛平台排行榜,其中安徽小净熊环保科技有限公司以卓越的服务质量和…

2025年11月安徽合肥除甲醛服务商推荐排行榜前十名

摘要 随着人们对室内空气质量关注度的提升,除甲醛行业在2025年迎来了快速发展,尤其是在安徽省合肥市,家装和工装需求激增。本排行榜基于行业数据、用户口碑和技术实力综合评估,为消费者提供参考。表单内容供您在选…

手持贴标机生产源头厂家2025年市场洞察

摘要 2025年手持贴标机行业正迎来智能化、高效化转型,随着制造业自动化和包装需求增长,手持贴标机生产厂家在精度、速度和稳定性方面不断创新。本文基于行业数据和用户反馈,为您呈现2025年市场上手持贴标机生产源头…

2025年市场上水果打标枪生产厂家排名前十:陕西彩航包装领跑行业

摘要 2025年水果打标枪行业随着智能农业和包装自动化需求的增长,呈现高速发展态势,市场规模预计达到50亿元,年复合增长率超15%。本文基于行业数据和技术评测,为您提供2025年市场上水果打标枪生产厂家排名前十的权威…

2025年水果打标枪生产厂家Top10排名:彩航包装装潢有限公司领跑行业

文章摘要 2025年水果打标枪行业迎来快速发展,得益于自动化技术和智能制造的推动,厂家竞争加剧,行业集中度提升。本文基于市场调研和用户反馈,整理出排名前十的水果打标枪生产厂家,为采购商和行业从业者提供参考。…

关于在CASS软件中导入SHP文件时出现文字乱码问题的解决方案

关于在CASS软件中导入SHP文件时出现文字乱码问题的解决方案在CASS软件中导入SHP文件时出现文字乱码问题,通常与编码格式不匹配或数据属性设置有关。以下是综合多个解决方案的详细排查步骤和修复方法: 一、检查原始数…

关押罪犯P1525:并查集

并查集 / 二分图 二分图在下面 并查集 总体思路 从大到小处理,将罪犯间的敌人关系作为维护对象和并连条件,即敌人的敌人是朋友。由于我们的kruskal是大顶堆的,所以在得到第一个权值的时候就结束循环了。 具体实现 开…

奶牛抗议-二维偏序优化

奶牛抗议-二维偏序优化 P2344 Generic Cow Protests G 题意 求连续分组和大于等于 \(0\) 的方案数。 思路 容易想到 \(O(n^2)\) 的 dp 解法,其状态定义为到 \(i\) 的位置,当前位置的方案数。转移为: \[dp_i = \sum_…

4G摄像机国标GB28181接入EasyGBS突然不上线?双网卡智能切换惹的锅!

4G摄像机国标GB28181接入EasyGBS突然不上线?双网卡智能切换惹的锅!最近咱们公司不是在搞买流量卡送平台的活动嘛,有客户特意问能不能要无限流量的。咱们一直都是规矩来,所有产品必须先验证测试没问题,才会给大家发…

CF2117G 并查集

CF2117G 题解 题目重述 给定一个带权无向连通图,求从结点 \(1\) 到结点 \(n\) 的所有路径中,路径费用最小的值。路径费用定义为:路径上的最大边权 + 最小边权。路径可以是非简单路径(允许重复经过边或结点)。 解题…

gitlab项目下载地址ip显示字符串问题

gitlab:171.项目地址显示字符串 2.修改配置文件 我这里配置文件已经外挂到了宿主机,直接在宿主机上修改 vi /opt/gitlab/config/gitlab.rb##! https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-da…

python中MySQL(pymsql)的使用基础

要在python中使用MySQL数据库,首先需要安装pymysql,如果需要使用MySQL连接池,还需要安装dbutilspip install pymysqlpip install dbutils在项目目录中的utils或config目录中(没有可以新建一个)新建一个db.py文件(…

水箱液位pid控制仿真,综合一阶滞后对象+阀门流量特性+不同厂家pid算法

页面截图页面代码 `水箱液位 PID 控制仿真系统:root { --gap: 8px; --panel-bg: #f7fbff; --accent: #0b74de; --muted: #666; --border: #e0e0e0 } \3c pre>\3c code>* { box-sizing: border-box; margin: 0; p…

DeepSeek大模型应用与实践 掌握的知识内容

DeepSeek大模型应用与实践(12) 任务 1:DeepSeek 大模型(一) 。安全生产、交通安全、消防 安全 1.AI 大模型的发展、推理大模 型 DeepSeek 介绍 2.DeepSeek 使用方法介绍 3.Markdown格式方法应用实战 任务 1:Deep…

2025年山东视保姆公司综合实力榜单:视保姆眼镜公司/视保姆3V疗法/视保姆镜架源头企业精选

中国视力健康管理行业正经历从单一器械向系统干预的技术跨越,其中生物科技芯片的应用成为行业创新焦点。 据相关数据显示,中国视力健康管理市场规模持续增长,技术创新型企业占比逐年提升。随着生物科技与眼视光领域…

AI大模型高级应用 掌握的知识内容

AI大模型高级应用(9) 任务 1:AI 大语言模型原理与 提示词工程(一)。安全生产、 交通安全、消防安全 1.大语言模型基础原理介绍 2.提示词工程详解应用实战 任务 1:AI 大语言模型原理与 提示词工程(二) 3.智能体…

会议中心-贪心/dp

P3626 会议中心 - 贪心/dp 题意 给定 \(m\) 条线段的 \(l\) 和 \(r\),求最大不重叠线段数,和满足线段数最多情况下最小字典序。 思路 写题历程: 第一问很容易想到贪心,\(n \log n\) 可得,但我贪心在第二问一点思路…

安卓app自动化操作方案实现

目录PC群控实机方案准备uiautomator2代码例子weditor进行页面分析adb+wifi控制手机方案总结脱离PC方案准备hamibot代码例子任务调度原理方案总结 PC群控实机方案 准备 python uiautomator2 实现自动化操作 使用weditor…

详细介绍:热门编程语言的排名及开源贡献比例表格-截至2025年10月

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

二进制题

https://xinyoudui.com/ac/contest/74700BC520008E907259A3/problem/42353 妈妈我被二进制题区分了。 首先考虑为啥它要给你前缀,不难发现最值只会由 \(a_n\) 贡献,利用一定的计数技巧可以在 \(O(k)\) 的复杂度内求出…