CSP-S 2025 T2 [道路建设]

news/2025/11/6 19:35:48/文章来源:https://www.cnblogs.com/KLaneX/p/19197577

前言

赛时只拿到了$ kruskal$板子的 \(A\)性质的 \(32pts\),真正唐完,,,,

切入

首先我们可以一眼顶针看出这是一道最小生成树的题,然后发现\(K\leq10\),可以想到直接暴力枚举\(2^k\)次的不同排列,然后跑一遍\(kruskal\),但是每一次枚举都需要暴力地建一次图,发现重复贡献太多,故考虑优化

优化

先对给出的原边和村庄的边建图,然后根据枚举的条件去封锁没有城市化改造的村庄的边,时间复杂度应该是\(O(2^km+2^kkn)\),其实这道题虽说是蓝但也还挺好想的,对于我的难点来说是不会代码上的实现,导致场上浪费了大量的时间还是打不出来,码力还是太弱了啊......

AC Code
#include<bits/stdc++.h>
#define int long long
#define endl '\n'
#define endll " "
#define fre(x) freopen(x".in","r",stdin);freopen(x".out","w",stdout);
#define pii pair<int,int>
#define pb push_back
#define eb emplace_back
#define it inline int
#define iv inline void
#define ib inline bool
#define sakura_no_uta return 0
using namespace std;
const int MAXN=10000050;
const int INF=0x3f3f3f3f3f3f3f3f;
const int MOD=998244353;
it gcd(int x,int y) {return y==0?x:gcd(y,x%y);}
it lcm(int x,int y) {return y/gcd(x,y)*x;}
it max(int x,int y) {return x>y?x:y;}
it min(int x,int y) {return x<y?x:y;}
it ksm(int x,int m,int mod)
{int res=1,bas=x%mod;while(m){if(m&1)res=(res*bas)%mod;bas=(bas*bas)%mod;m >>= 1;}return res;
}
int n,m,l,r,u,v,w,cnt,tot,ans=INF,cnt1,cnt2,cnt3,lim,T,head[MAXN],k,a[11][MAXN],c[MAXN],fa[MAXN],val;
bool vis[11];
it find(int x)
{if(x==fa[x])return x;return fa[x]=find(fa[x]);
}
struct edge
{int fr,to,w;
}e[MAXN];
ib cmp(edge x,edge y)
{return x.w<y.w;
}
iv add_edge(int u,int v,int w)
{e[++tot].fr=u;e[tot].to=v;e[tot].w=w;
}
it calc(int cnt,int tot)
{int sum=cnt1=0;for(int i=1;i<=tot;i++){if((e[i].fr>n&&!vis[e[i].fr-n]) || (e[i].to>n&&!vis[e[i].to-n]))continue;int uu=find(e[i].fr),vv=find(e[i].to);if(uu!=vv){fa[uu]=vv;sum+=e[i].w;cnt1++;if(cnt1==n-1+cnt)break;}}return sum;
}
iv solve()
{lim=1<<k;for(int i=0;i<lim;i++){memset(vis,0,sizeof(vis));cnt=val=0;for(int j=1;j<=k;j++){if((1<<(j-1))&i){val+=c[j];vis[j]=1;++cnt;}}for(int i=1;i<=n+k;i++)fa[i]=i;ans=min(ans,val+calc(cnt,tot));}
}
signed main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin >> n >> m >> k;for(int i=1;i<=m;i++){cin >> u >> v >> w;add_edge(u,v,w);}for(int i=1;i<=k;i++){cin >> c[i];for(int j=1;j<=n;j++){cin >> a[i][j];add_edge(n+i,j,a[i][j]);}}sort(e+1,e+tot+1,cmp);solve();cout<<ans;sakura_no_uta;
}

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

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

相关文章

使用Git钩子+ husky + lint语法检查提高前端项目代码质量

@目录配置 Git Hook原理介绍安装 Husky启用 Husky添加 Git Hook测试脚本执行效果添加语法检查安装Prettier配置Prettier格式化规则调优添加 Git Hook添加Git提交规范检查安装commitlint配置commitlint添加 Git Hook 作…

[题解]P10277 [USACO24OPEN] Bessies Interview S

P10277 [USACO24OPEN] Bessies Interview S 第一问可以用优先队列模拟,存储每个人的结束时间即可。 第二问,一开始考虑的是对于某一时刻队列中结束时间最小的人是可以任意互换顺序的,所以就用并查集把这些人合在一起…

关于 Java快速查找详细

package V_Recursion;public class C_QuickSort {public static void main(String[] args) {int[] arr = {6, 1, 2, 7, 9, 3, 4, 5, 10, 8};quicSort(arr, 0, arr.length - 1);for (int i = 0; i < arr.length; i++…

什么是Ansible 清单 - 详解

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

完整教程:如何用开源软件

完整教程:如何用开源软件pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &…

第一次团队项目作业

软件工程团队项目第一次作业 - VALORANT 智能战术助手(第一部分) 作业信息这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/202501SoftwareEngineering/这个作业要求在哪里 https://edu.cnblogs.com/campu…

隨機變量本質之最終闡述

懷特博士: 我的理智所剩無幾,必須儘快警告您——切勿觸碰概率的本質!那个不可名狀的存在堂而皇之地通過霍爾教授的死宣誓著自己的主宰。Kl-mghrov——我無法準確發音,這個名字本身就讓燈光閃爍、指針顫動。我是如此…

足式机器人适应多地形的方案

基于视觉的感知运动 两阶段方法:流程:首先在完全可观测的马尔可夫决策过程(MDP) 中,利用特权信息训练一个强大的教师策略。然后,通过知识蒸馏,将教师策略的知识迁移给一个仅能使用真实传感器数据的学生策略。优…

使用vLLM实测3090和4090的大模型推理性能

使用`vLLM`测试下大模型并发推理场景下3090和4090两张显卡的性能表现,看下4090是否在高并发场景下具备更高的扩展性。 3090显卡和4090显卡在模型推理过程中的显存和GPU使用率都比较接近,1~8并发度场景下,3090和409…

CF1700F Puzzle

考虑如果是 \(1 \times n\) 怎么做。 显然是前缀和的差的绝对值的和,因为每次移动改变一位前缀和。 考虑上下交换的本质是什么,就是给第一行减 \(1\),第二行加 \(1\),反过来同理,那么在前缀和异号时显然交换是不劣…

Redis高可用与高并发探险之旅:从单机到集群的完美进化【第三部分】

可以结合之前的文章融合起来一起理解学习:分布式缓存-Redis集群在一个名为"数据大陆"的世界里,Redis王国正面临着前所未有的挑战。随着用户流量的激增,单机Redis服务器已经不堪重负。今天,就让我们跟随年…

UE:论运行时动画录制的关键-正确获取骨骼数据与保存

© mengzhishanghun 原创文章 首发于 博客园 禁止未经授权转载核心问题 在 UE5.4 中实现运行时动画录制,最关键的两个问题是:如何获取正确的骨骼数据 - 避免崩溃和数据不匹配如何正确保存 AnimSequence - 使用…

a-menu 当设置折叠状态如何穿透悬浮菜单样式

效果antReset.css .ant-menu-submenu .ant-menu-submenu-popup .ant-menu .ant-menu-light {border: 1px solid #173808 !important; }/* 直接针对 popup 整体背景 */ .ant-menu-submenu-popup {background-color: #17…

attention论文及Transformer工作原理概述

attention论文及Transformer工作原理概述Posted on 2025-11-06 19:09 wsg_blog 阅读(0) 评论(0) 收藏 举报attention论文及Transformer工作原理概述

kamailio+rtpengine对sdp的处理

概述 使用kamailio+rtpengine的过程中,默认会使用rtpengine处理sdp信息,同时又需要对sdp信息定制,就需要对cfg配置流程中做特殊处理才能实现。 环境 CentOS 7.9 kamailio:5.8.3-bullseye docker rtpengine:mr13.1.1…

软工团队项目第一次作业

软工团队项目第一次作业作业所属课程 https://edu.cnblogs.com/campus/fzu/202501SoftwareEngineering/作业要求 https://edu.cnblogs.com/campus/fzu/202501SoftwareEngineering/homework/13573作业的目标 团队展示+选…

低代码权限管理安全合规指南:守住数据安全的 “最后一道防线”

随着数据安全法、个人信息保护法的落地,企业对系统权限管理的合规要求越来越高。低代码平台作为企业数字化的核心工具,其权限管理不仅要保障数据不泄露、操作不越权,还要满足行业监管和法律法规的要求。 很多企业误…

2025-11-06

2025-11-06CF补题 Problem - 515C - Codeforces(1400)(string+a little factorial) 这题妙在把各个数字阶乘转换成仅含有2 3 5 7 数字,然后直接求解 要对每个数的阶乘进行换算[!tip]9 is 7!*8*9=7!*3!*3!*2!8 is …