Codeforces 1385G Columns Swaps 题解 [ 蓝 ] [ 扩展域并查集 ] [ 二分图最大权匹配 ] [ 基环树建模 ]

news/2025/10/2 1:37:21/文章来源:https://www.cnblogs.com/zhr0102/p/19122010

Columns Swaps:

经典的图论问题,典中典了。

首先判掉无解,如果有一个数没有出现两次,则一定无解。在此基础上我们也可以得出一个转化:只需要保证序列 \(a_1\) 是一个排列,那么 \(a_2\) 自然也是一个排列了。

Sol.1 二分图最大权匹配

如果你科技学傻了,那么这就是一种最无脑的做法。

将每个数字看做二分图的左部点,每个位置看做二分图的右部点,每个数字朝对应位置连边。如果这个数字最初出现在 \(a_1\) 中,边权为 \(1\),否则边权为 \(0\)。因为每个数字必定会和某个位置匹配,所以答案一定是一个排列。记求出的最大权为 \(x\),则答案即为 \(n -x\)

或者说还可以转化为最小割集合划分模型之后跑网络流,都是差不多的。时间复杂度取决于你二分图匹配怎么实现,如果用 Dinic 就是 \(O(n\sqrt n)\) 的。

Sol.2 基环树建模

参考“连续攻击游戏”的 trick,每个物品的属性要么是 \(a\),要么是 \(b\),可以将该物品视为边,\(a, b\) 等数字视为点,连边之后发现,因为每个数字最多出现 \(2\) 次,所以会形成一颗基环树 / 基环树森林。

我们对形成的每颗基环树分别考虑,先枚举某条特定的边是选 \(u\) 还是选 \(v\),选完之后容易发现为了形成一个排列,那么此后的操作一定是唯一的。于是算一下两者的花费,取最小值即可。

时间复杂度 \(O(n)\)

Sol.3 扩展域并查集

如果两个相同的数同时出现在 \(a_1\) 中,那么说明这两个位置必然有一个没有被反转、且另一个被反转。于是可以直接上扩展域并查集,求出每个连通块反转的最小值即可。

时间复杂度 \(O(n)\),代码难度应该是最小的了。

#include <bits/stdc++.h>
#define fi first
#define se second
#define eb(x) emplace_back(x)
#define pb(x) push_back(x)
#define lc(x) (tr[x].ls)
#define rc(x) (tr[x].rs)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ldb;
using pi = pair<int, int>;
const int N = 400005;
int n, tot[N], a[N], b[N], prea[N], preb[N], tag[N];
int fa[N], sz1[N], sz2[N];
void init()
{for(int i = 1; i <= n; i++) fa[i] = i, sz1[i] = 1, sz2[i] = 0, tag[i] = 0;for(int i = n + 1; i <= 2 * n; i++) fa[i] = i, sz2[i] = 1, sz1[i] = 0, tag[i] = 0;
}
int findf(int x)
{if(fa[x] != x) fa[x] = findf(fa[x]);return fa[x];
}
void combine(int x, int y)
{int fx = findf(x), fy = findf(y);if(fx == fy) return;fa[fx] = fy;sz1[fy] += sz1[fx];sz2[fy] += sz2[fx];
}
void solve()
{cin >> n;for(int i = 1; i <= n; i++) tot[i] = prea[i] = preb[i] = 0;for(int i = 1; i <= n; i++){cin >> a[i];tot[a[i]]++;}for(int i = 1; i <= n; i++){cin >> b[i];tot[b[i]]++;}for(int i = 1; i <= n; i++){if(tot[i] != 2){cout << -1 << "\n";return;}}init();for(int i = 1; i <= n; i++){if(prea[a[i]]){combine(prea[a[i]] + n, i);combine(prea[a[i]], i + n);}if(preb[a[i]]){combine(preb[a[i]], i);combine(preb[a[i]] + n, i + n);}        if(prea[b[i]]){combine(prea[b[i]], i);combine(prea[b[i]] + n, i + n);}if(preb[b[i]]){combine(preb[b[i]] + n, i);combine(preb[b[i]], i + n);}                prea[a[i]] = i;preb[b[i]] = i;}int ans = 0;for(int i = 1; i <= n; i++){if(findf(i) != i) continue;if(sz1[findf(i)] < sz2[findf(i)]){tag[findf(i)] = 1;ans += sz1[findf(i)];}else{tag[findf(i + n)] = 1;ans += sz2[findf(i)];}}cout << ans << "\n";for(int i = 1; i <= n; i++)if(tag[findf(i)])cout << i << " ";cout << "\n";
}
int main()
{//freopen("sample.in", "r", stdin);//freopen("sample.out", "w", stdout);ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int t;cin >> t;while(t--) solve();return 0;
}

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

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

相关文章

做网站是不是要学编程三亚市城乡建设局网站

文章目录 前言Compose应用程序模型Compose规范顶层属性servicenetworkvolumesconfigssecrets 环境变量.env文件environment属性主机shell中的环境变量 Profiles&#xff08;剖面&#xff09;启动剖面自动启动剖面和依赖项解析 多compose.yml文件共享与扩展构建规范构建属性 部署…

兰溪自适应网站建设特点传奇手游官网下载

&#xff08;3&#xff09;在 pipeline.py 文件中对数据进行存储&#xff0c;此程序先写 入 txt 文件中&#xff0c;是为了判断该程序是否能正确爬取出数据。 此处使用了 json 库&#xff0c;使用 ensure_ascii False&#xff0c;能够确 保非 ASCII 字符&#xff08;如中文&am…

html5电影网站建设php网站开发电子书

背景&#xff1a; 接上一篇文章&#xff0c;ProcessWindowFunction 结合自定义触发器会有状态过大的问题&#xff0c;本文就使用AggregateFunction结合自定义触发器来实现&#xff0c;这样就不会导致状态过大的问题了 AggregateFunction结合自定义触发器实现 flink对于每个窗…

网站开发二级域名深圳企业专业网站设计

spring-boot 一款无侵入型&#xff0c;轻量级的接口文档生成工具apiggs 名字叫&#xff1a;apiggs 使用只需两步&#xff0c;先把插件代码引入pom文件&#xff0c;然后编译打包即可 之后项目的target目录下&#xff0c;就会多出一个apiggs的文件夹&#xff0c;里面便是项目cont…

vps网站设置wordpress代码高亮插件

一.属性计算、属性监听、属性过滤 1.认识MVVM V &#xff08;用户视图界面&#xff09;通过VM (应用程序) 向Model(数据模型) 取值与赋值的过程&#xff01; 数据双向绑定 视图改变更新数据&#xff0c;数据改变更新视图 2.属性计算 //在vue实例中通过computed去计算new …

US$78 HU66 Clamp SN-CP-JJ-12 Work on Volkswagen Serials for SEC-E9 Key Cutting Machine

HU66 Clamp SN-CP-JJ-12 Work on Volkswagen Serials for SEC-E9 Key Cutting Machine HU66 Auxiliary fixture is suitable to copy keys for Sharon, Touareg, Phaeton, Beetle and other Volkswagen series, as wel…

US$78 HU64 Clamp Work on Benz SN-CP-JJ-11 for SEC-E9 Key Cutting Machine

SEC E9 HU64 Clamp for Benz SN-CP-JJ-11Benz serials for class C,E and GLK ,Sprinter,Viano, Vito and all new Benz improted cars (including Maybach,Lorinser and Carlsson,class in S and GL,out milling and …

杭州家具网站建设方案网站开发PHP程序员招聘

Java中主要有八种基本数据类型&#xff1a; 1、整型&#xff1a;byte、short、int、long 2、字符型&#xff1a;char 3、浮点型&#xff1a;float、double 4、布尔型&#xff1a;boolean 一、整型 Java中整型数据属于有符号数&#xff0c;即第一个bit位为0表示正整数&…

PlantUML 完整教程:从入门到精通

什么是 PlantUML PlantUML 是一个开源工具,允许用户使用简单直观的文本描述来快速创建 UML 图表。它基于纯文本语法,能够生成多种类型的图表,包括时序图、用例图、类图、活动图、组件图、状态图等。 PlantUML 的核心…

长治长治那有做网站的小程序定制开发公司平台

目录 Shell: 3.Shell命令: command [-options] arg1 arg2 .. 1.Shell基本命令: 2.文件查看命令: 3.文件查找命令: 通配符: 7.压缩解压命令: 8.让虚拟机上网: 9.apt-get工具集: Shell: 1.保护Linux内核(用户和Linux内核不直接操作,通过操作Shell,Shell和内核交互) 2.命令…

建设法规的网站网站开发者技术网站

数据结构分为逻辑结构和物理结构。 逻辑结构&#xff1a;指数据元素之间逻辑关系的数据结构&#xff0c;这里的逻辑关系是指数据元素之间的前后间关系&#xff0c;与数据在计算机中的存储位置无关。物理结构&#xff1a;指数据的逻辑结构在计算机存储空间中的存放形式称为数据…

你妈的

为什么结构图论这么难为什么结构图论这么难为什么结构图论这么难为什么结构图论这么难为什么结构图论这么难为什么结构图论这么难为什么结构图论这么难为什么结构图论这么难为什么结构图论这么难为什么结构图论这么难为…

网上书城网站开发意义网站和搜索引擎

解析class文件案例介绍本案例主要介绍通过java代码从class文件中解析&#xff1b;class文件、常量池、属性表&#xff1b;作为类(或者接口)信息的载体&#xff0c;每个class文件都完整地定义了一个类。为了使java程序可以“编写一次&#xff0c;处处运行”&#xff0c;Java虚拟…

开设赌场罪建设网站有什么专业做心理的网站

据悉&#xff0c;从2023年11月1日开始&#xff0c;TikTok Shop将根据卖家的店铺表现来应用3种不同类型的结算期&#xff0c;其中&#xff0c;标准结算期&#xff1a;资金交收期为8个日历日&#xff1b;快速结算期&#xff1a;资金交收期为3个日历日&#xff1b;延长结算期&…

高端品牌网站建设建议网站制作价格范围

题干&#xff1a; 给出N个正整数&#xff0c;检测每个数是否为质数。如果是&#xff0c;输出"Yes"&#xff0c;否则输出"No"。 Input 第1行&#xff1a;一个数N&#xff0c;表示正整数的数量。(1 < N < 1000) 第2 - N 1行&#xff1a;每行1个数…

有网站加金币的做弊器吗长沙创求网络科技有限公司

《微机与单片机概述课件.ppt》由会员分享&#xff0c;提供在线免费全文阅读可下载&#xff0c;此文档格式为ppt&#xff0c;更多相关《微机与单片机概述课件.ppt》文档请在天天文库搜索。1、1.微机与单片机概述1.1 微型计算机的特点和发展1.2 微机的分类与单片机1.3 微处理器、…

001

001$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");001.在hello world中编译器工具链分别做了什么为便于理解底层原理,本文中所有操作均在cmd中使用gcc实现…

US$188 Tubular Key Clamps for SEC-E9 Key Cutting Machine Tubular Key Cutting

Tubular Key Clamps Work on House keys Motorcycle keys for SEC-E9 Key Cutting MachineIntroduction of Jaw:This Car Key Clamp is mainly composed by the front-block, post-block, clamp base, handle, elastic…

做网站Linuxseo排名优化公司哪家好

[css] css中的url()要不要加引号&#xff1f;说说你的理解 可以加&#xff0c;也可以不加。这个跟html标签的属性书写可以加引号也可以不加引号是一样的道理&#xff0c;当然如果属性中含有特殊字符比如空格则需要加空格&#xff0c;否则会引起浏览器解析错误。如果想养成良好…

网站建设客户怎么找网站推广策划书 精品

市政公共设施建设在近几年来发展迅速&#xff0c;市政设备的更新换代&#xff0c;资产管理等也成为其中的重要一项。在市政设施建设过程中&#xff0c;井盖也是不可忽视的&#xff0c;一方面&#xff0c;根据传统的管理井盖模式来讲&#xff0c;缺乏有效的远程监控管理方法和手…