[CSP-S 2025] 道路修复 road

news/2025/11/13 21:45:48/文章来源:https://www.cnblogs.com/-xpigeon-/p/19219646

T2 道路修复(road)

如果不加乡镇,也就是第一档部分分,这就是一个裸的最小生成树模板,kruskal 直接做。

发现乡镇的范围很小只有 \(5-10\),考虑 \(2^k\) 枚举哪些乡镇要用,直接把启用乡镇的代价加到边权和里然后把带来的新边全加进去重新跑最小生成树,时间复杂度 \(O(2^k(m+kn) \log{(m+kn)})\) ,这样子时间复杂度就很炸,场上我以为接下来的优化和 \(prim\) 相关,但 \(prim\)\(n^2\) 的其实毫无用处,在费劲心思想不熟悉的东西之前,也应该想想如何对现有的做法进一步优化,哪怕不优化复杂度,剪枝一下也可以。

发现瓶颈在于 \(m\) 很大,有 \(1e6\) ,但实际上需要用到只有 \(n\) 级别,考虑一开始先跑一次最小生成树得到的边才是有效的,其他边在后续的选择中一定没有竞争力,这样就直接把边数将到 \(n\) 级别,现在复杂度是 \(O(2^kkn \log{kn})\) 的,这东西跑满也是能到 \(1e9\) 的尝试去 \(log\)

我们可以把所有边直接加进来后排序,用 \(vis\) 数组记一下每次都有哪些乡镇要被启用,跑最小生成树的时候判一下,这样就能把 \(log\) 去掉。

甚至还可以再剪枝一下,如果现在跑的答案已经不优了,就可以直接跳过这轮最小生成树的计算,当然这也只是一个小剪枝。。。

赛后发现这题本身好像思维上没有太大限制吧,但是场上的思路走错了后面就什么都没想出来,适时复盘一下成果再重新选择方向是正确的,这题只打了最暴力的分真是蛮可惜的。

const int N=2e4+5;
const int M=2e6+5;
int n,m,k;
struct edge{int u,v,w;
}g[M],e[M];
int c[15];
int a[15][N];
int fa[N],ans;
bool vis[15];
bool cmp(edge i,edge j){return i.w<j.w;
}
int find(int x){return x==fa[x]?x:fa[x]=find(fa[x]);
}
int solve1(){for(int i=1;i<=n;i++){fa[i]=i;}int cnt=0,res=0;for(int i=1;i<=m;i++){int x=find(g[i].u);int y=find(g[i].v);int w=g[i].w;if(x==y) continue;fa[x]=y;res+=w;e[++cnt]=g[i];if(cnt==n-1) break;}return res;
}
void solve(int s){int num=n,res=0,cnt=0;for(int i=1;i<=n+k;i++){fa[i]=i;}for(int i=0;i<k;i++){int ni=i+1;if((s>>i)&1^1){vis[ni]=0;continue;}num++;vis[ni]=1;res+=c[ni];}for(int i=1;i<=m;i++){if(e[i].u>n && vis[e[i].u-n]==0) continue;int x=find(e[i].u);int y=find(e[i].v);int w=e[i].w;if(x==y) continue;res+=w;cnt++;fa[x]=y;if(res>=ans) break;if(cnt==num-1) break;}ans=min(ans,res);
}
void xpigeon(){cin>>n>>m>>k;for(int i=1;i<=m;i++){cin>>g[i].u>>g[i].v>>g[i].w;}sort(g+1,g+m+1,cmp);ans=solve1();m=n-1;for(int i=1;i<=k;i++){cin>>c[i];for(int j=1;j<=n;j++){cin>>a[i][j];e[++m]={n+i,j,a[i][j]};}}sort(e+1,e+m+1,cmp);for(int s=1;s<(1<<k);s++){solve(s);}cout<<ans<<'\n';
}
signed main(){ios::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);xpigeon();return 0;
}

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

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

相关文章

[CSP-S 2025] 社团招新 club

T1社团招新(club) 原题链接 T1出这个... 以下规定三个社团分别为 \(a,b,c\)。 第一眼的思路尝试对每个人对三个社团的满意度取 \(max\),然后依次选最优的,很快发现这么做不行,因为有可能在满足限制后其他人能带来的…

【排查实录】Web 页面能打开,服务器能通接口,客户端却访问失败?原因全在这! - 实践

【排查实录】Web 页面能打开,服务器能通接口,客户端却访问失败?原因全在这! - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important;…

s2 NOIP模拟赛15-div2新太阳睡觉中心

新太阳睡觉中心 题面 原题链接 题解 简单计数题,但再给出一种与场上做法不一样的做法。 考虑总和转期望。将答案除以 \(2^k\),则为将 \(-1\) 随机确定为 \(01\) 时答案的期望。 根据题目描述,我们对于每一段连续的 …

LCA-雷达题解

雷达 题面 在 \(n \times n\) 的方格上,每个方格都有权值 \(a_{i,j}\) ,可花费 \(a_{i,j}\) 的代价覆盖以 \((i,j)\) 为中心,大小为 \(n \times n\) 的正方形区域。求最小的代价使得整片方格被覆盖。 题解 除了中心…

[USACO24JAN] Cowlendar S题解

[USACO24JAN] Cowlendar S 题面 原题链接 简介:给出 \(a_1....a_n\),对所有满足 s 的 \(L\) 求和 s 为:\(\forall i,4 \times L \leq a_i\) \(a_i \bmod L\) 不超过 \(3\) 种不同的值。\(1 \leq a_i \leq 4 \cdot 1…

2025年11月粮库空调,恒温粮库空调,一体式粮库空调厂家最新推荐,储粮控温权威测评与采购指南!

粮库空调作为保障粮食存储安全的关键设备,其应用场景覆盖了粮食存储的多个核心领域,不同场景对设备的温湿度控制精度、稳定性等需求各有侧重。而广州沃克斯顿环境设备有限公司凭借丰富的产品类型与过硬的技术实力,在…

CF 2093G Shorten the Array

T2 CF 2093G Shorten the Array 原题链接 本着不轻易上算法的原则想了半天,最后还是 01 trie 做完了。 如果只要求异或和为 \(k\) ,就可以用 map 维护每个数出现的最晚的位置,根据异或的性质直接查找需要的数字,统…

【A】Shinichi Kudo

https://www.luogu.com.cn/training/873086 qoj14429. Sequence Is Not Subsequence 下记 \(f(S)\) 表示 \(S\) 的答案。\(f(aaa...a)=|S-1|\times a\)。 \(f(ab)=ba\)。 \(f(abS)=ba+f(bS)\)。P14134 【MX-X22-T5】「…

如何在团队士气低落时重建信任与动力

团队士气低落是组织面临的严峻挑战,其根源往往在于信任缺失、方向迷茫或持续的压力。要在这种情况下重建信任与动力,管理者必须采取一套系统性且以人为本的策略。核心在于立即开启透明、诚实的双向沟通,主动承认问题…

noip2023T3 题解

Ad-hoc 题 这里仅考虑 \(f>g\) 考虑暴力 dp \(dp_{i,j}\) 表示第一个序列遍历到 \(i\) 项,第二个序列遍历到 \(j\) 项。 容易得到转移式子 \(dp_{i,j} = [a_i>b_j]\times [dp_{i-1,j}|dp_{i-1,j-1}|dp_{i,j-1}]…

#题解#牛客: 小心火烛的歪#枚举组合#位运算#dfs#

传送门 分析 1.这是一个枚举组合求最优的问题:集合大小q为7,可以用位运算来进行组合枚举 2.若点火方案f[i][j]==g[i][j]=1则,该方案一定不能用 3.令 g[i][j]+=f[i][j],若该方案可用且在枚举子集内,最终g中没有0则…

20251113周四日记

20251113周四日记今日: 1.早上回学校,开始看3b1b的深度学习课。写笔记。 2.中午和陈全去吃了萨莉亚,回来继续看课写笔记。 3.晚上和同门去吃饭,回来继续看Chapter7以及对diffusion模型的讲解。没事干了。 3Blue1Br…

2025.11.12 周作业 43(并非)速通

闲话 卡了好几道题了,怎么回事呢。 A. CF1796C 不难想到最优解应该是某个数 \(x\) 不断乘上 \(t\),即这个集合(大致)可以表示为: \[\{x, x \times t, x \times t^2, \dots, x \times t^k\} \]容易想到令 \(x=2\) …

2025 年 11 月螺丝打包机,五金打包机,称重打包机厂家最新推荐,权威测评排名与工业采购选择指南!

2在工业 4.0 浪潮下,螺丝、五金等零部件包装的效率与精度,直接影响企业生产流转速度与成本控制。传统包装模式面临人工依赖强、混料风险高、效率低下等痛点,而优质的打包设备成为制造业降本增效的关键抓手。温州工友…

深入解析:list的迭代器

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

通过元素定位其各种层级关系元素的工具

# element_relation_locator.py # 通过元素定位其各种层级关系元素的工具from appium.webdriver.common.appiumby import AppiumByclass ElementRelationLocator:"""元素关系定位器类,用于通过元素定位…

2025年11月五金打包机,称重打包机,半自动打包机厂家品牌推荐榜,彰显包装设备技术实力!

在当前制造业智能化转型的关键阶段,五金、紧固件等行业对包装设备的技术要求日益提升,高效、精准、稳定的打包设备成为企业提升生产效率、控制成本的核心支撑。在众多包装设备厂家中,温州工友自动包装设备有限公司凭…

题解:P1393 Mivik 的标题

更差的阅读体验这也太深刻了。 我们考虑一个 dp。我们假设 \(f_i\) 表示考虑前 \(i\) 个字符,\([i - |S| + 1: i]\) 这一段存在一个 \(S\) 的匹配,并且前 \(i\) 个字符不存在别的位置有 \(S\) 匹配的方案数。 那么我…

appium包含文本定位的5种方法

# appium定位,以text包含部分文字定位示例# 方法1: 使用XPath的contains函数进行text部分匹配 from appium.webdriver.common.appiumby import AppiumBydef locate_element_by_partial_text(driver, partial_text):&q…

C++ const总结

1、const 修饰普通变量 C/C++中常量用于记录程序中不可更改的数据,在数据类型前加const,就得到了一个不可更改的常量。常量声明:const用于定义常量const int MAX = 100;//MAX的值在程序运行期间无法被修改,所以必须…