首页 > 其他分享 >[PA 2020] Trzy drogi

[PA 2020] Trzy drogi

时间:2023-04-11 09:13:31浏览次数:41  
标签:drogi 树边 查集 PA 2020 权值 三条 oplus 非树边

pjudge 题解虽然写了,但可能是 bot 写的,写的很不清楚。

根据经典做法,搜出一棵 dfs 树,对非树边赋随机权值,树边权值为跨过它的所有非树边的权值 xor。

那割三条边能割开的条件就是:选三条边的一个子集,这个子集中的边权 xor 为 0。

也就是存在 \(w_i = 0\) 或 \(w_i \oplus w_j = 0\) 或 \(w_i \oplus w_j \oplus w_k = 0\)。

考虑对图进行一些预处理,判掉一些简单情况。

首先判掉割边:对于一条割边,先计算割了它的答案,再把两个端点用并查集缩起来,表示以后再也不会割这条边。

处理完了图上不会有 \(w_i = 0\) 的边(也就是割边)。

接下来有一步炫酷操作。

先计算割两条边(再加随意一条边)就能把图割开的情况,也就是 \(w_i \oplus w_j = 0\) 的情况。只需要找到所有权值相等的边进行计算。

接下来的限制就是只有砍三条边,也就是 \(w_i \oplus w_j \oplus w_k = 0\) 的情况。

由于没有 \(w_i = 0\),那么 \(w_i,w_j,w_k\) 都是不同的,也就是同一权值的边只会割一条。

观察到相同权值的边割哪条效果都是一样的,可以对图进行如下处理:

给每条边加上“长度” \(l_i\),表示割这条边答案乘上几(也就是说砍三条边的话答案加上 \(l_i\times l_j\times l_k\))。把同一颜色的边中,选一条将长度设为边的数量,其他的长度设为 0。容易发现不改变答案。

对于长度为 0 的边,可以直接并查集把两个端点缩起来。

这样缩完以后,图上没有权值相同的边,并且因此图上没有度数 \(\le 2\) 的点,这对后面操作的复杂度证明有用。

接下来分类讨论砍三条边的情况。

零、三条非树边

由于树边一定使图联通,所以不可能。

一、一条树边,两条非树边

枚举这条树边,看看是否恰有两条非树边跨过这条树边。这部分容易统计。

二、两条树边,一条非树边

退役了。

三、三条树边

此时的方案中,非树边一定不会被割。

所以可以将非树边两端的端点用并查集并起来,得到一张新图,在新图上继续做。

由于图中每个点的度数至少为 \(3\),因此 \(|E| \geq \frac{3}{2} |V|\),故被缩掉的边数至少为 \(|E| - |V| + 1 \ge \frac{1}{2}|V|\)。

于是缩的轮数只有 \(\log m\) 轮。在每轮中都统计前两种情况即可。

标签:drogi,树边,查集,PA,2020,权值,三条,oplus,非树边
From: https://www.cnblogs.com/Rainbowsjy/p/17305030.html

相关文章

  • 每日学习记录20230221_purr包 GSEA pandas
    20230221:purr包GSEApandaspurr的map_*函数的使用DF=List1%>%names%>%map_dfr(function(x){#把List1转化成DataFrame的格式,map_dfr是把结果都按行合并起来.return(data.frame(x,List1[[x]]$'all'))})clusterProfile::GSEA调用的是DOS......
  • @RequestParam和@PathVariable的用法与区别
    **@PathVariable**格式@RequestMapping(value="/user/{username}")publicStringuserProfile(@PathVariable(value="username")Stringusername){ return"user"+username;}在上面的例子中,当@Controller处理HTTP请求时,userProfile的参数......
  • PaaS(Platform as a Service)技术
    PaaS(PlatformasaService)技术是一种云计算服务模型,为开发人员提供了一个完整的应用程序开发和部署平台,包括开发工具、运行时环境、数据库、网络和存储等,以简化应用程序的构建、部署和管理过程。具体而言,PaaS技术提供了以下功能和特点:开发工具:PaaS提供了丰富的开发工具,例如集......
  • PAC主成分分析__784手写特征案例
    fromsklearn.neighborsimportKNeighborsClassifierasKNNfromsklearn.decompositionimportPCAfromsklearn.ensembleimportRandomForestClassifierasRFCimportmatplotlib.pyplotaspltfromsklearn.model_selectionimportcross_val_scoreimportpandasas......
  • 编辑大量文本的情况vscode比notepad++性能更好
    尝试操作几十万行的文本的时候Notepad++直接卡死了二十多万行的文本选中需要卡几秒,剪切粘贴文本需要卡几秒文本替换需要跑几十秒,再多一些的话容易卡崩 使用vscode进行剪切粘贴批量替换之类的操作基本是不卡秒执行的 一次性选中多行的方法:使用ctrl+G可以跳转到指定行ct......
  • 'T' must be a non-abstract type with a public parameterless constructor
    虽然工作10多年,但是真正使用框架的项目很少很少...所以对接口,方法等约束毫无经验今天做了个动态代理dispatchproxy的类,但是在调用时却一直提示如下错误: ErrorCS0310'T'mustbeanon-abstracttypewithapublicparameterlessconstructorinordertouseitas......
  • Pandas模块实现向Excel写入数据
    Pandas模块实现向Excel写入数据importpandasaspddfData={#用字典设置DataFrame所需数据'序号':data[0],'项目':data[1],'数据':data[2]}#创建DataFramedf=pd.DataFrame(dfData)#存表,去除原始索引列(0,1,2...)df.to_excel(fi......
  • PAT Basic 1080. MOOC期终成绩
    PATBasic1080.MOOC期终成绩1.题目描述:对于在中国大学MOOC(http://www.icourse163.org/)学习“数据结构”课程的学生,想要获得一张合格证书,必须首先获得不少于200分的在线编程作业分,然后总评获得不少于60分(满分100)。总评成绩的计算公式为\(G=(G_{mid−term}×40\%+G_{final}×......
  • .Net Standard-Missing compiler member error Microsoft.CSharp.RuntimeBinder.CShar
     最近在玩dynamic的时候出现无法生成的情况."missingcompilermembererrorMicrosoft.CSharp.RuntimeBinder.CSharpArgumentInfo.Create"   解决方案:缺少Nuget包: Microsoft.CSharp ......
  • 景顺长城基于 Apache APISIX 在金融云原生的生产实践
    本文介绍了景顺长城在金融云原生架构演进中选择APISIX作为网关工具的技术细节,同时分享了使用APISIX的实践细节,并对APISIX的未来展望进行了探讨。作者李奕浩,景顺长城信息技术部研发工程师,负责公司网关和业务系统上云等工作。业务背景景顺长城基金管理有限公司成立于200......