题目链接 [POI2005]DWU-Double-row

wwwww

之前写了半小时 一卡机 没啦QAQ

简单说一下吧 【吐血ing

这道题长得好二分图啊

所以本能地连边

一种是A边 连可交换的数对

一种是B边 连相同的数字

然后才看题干【Facepalm

发现要求使同一侧没有重复颜色的最小交换次数

然后发现 AB都连上仿佛可做

由于最多两个相同数字

数对也是一对一

每一条长度连起来大于1的路都是A-B-A-B……

不在一个联通快里的点没有相互影响

现在考虑同色同侧

只有这种情况 边的起点和终点才在同一侧

自然想到0-1染色

举个栗子

接着我们发现 要使同侧无同色

必须要左侧所有点为同一颜色

因为如果有不同颜色的点

则说明它们之间连接的路上有起点终点同侧的边

也就是同色同侧 不成立

那么怎么改成相反色呢?

每个点连接的1~2条边的另一端点一定是异色 换一下就行了

点的数量没有变 不影响其他点颜色

考虑0,1对称

对于每个联通快 左边1总数和9总数中

取小的那个就是该联通快达到目标状态的最小步数

加起来就好啦

 void dfs(int x, int fa, int col){
vis[x] = ;
if(x <= n) cnt[col]++;
for(int i = head[x]; i != -; i = edge[i].next){
int vv = edge[i].v;
if(vis[vv]) continue;
dfs(vv, x, col ^ );
}
}

染色

 //last[i] 上一个值为i的位置 没有为0
for(int i = ; i <= (n << ); i++) head[i] = -;
for(int i = ; i <= n; i++){
int x; scanf("%d", &x);
if(last[x]) {add(last[x], i); add(i, last[x]);}
else last[x] = i;
}
for(int i = ; i <= n; i++){
int x; scanf("%d", &x);
add(i, i + n); add(i + n, i);
if(last[x]) {add(last[x], i + n); add(i + n, last[x]);}
else last[x] = i + n;
}

建边

【POI每日题解 #5】 DWU-Double-row的更多相关文章

  1. 【POI每日题解 #8】DYN-Dynamite

    你问蒟蒻为什么一天写两篇每日题解? 难道每日坚果你不能一天吃两包吗? 题目链接 哇…这道题第一反应就是二分答案[太明显了 枚举答案 就那个“关键节点到这些点中距离的最小值的最大值”[蒟蒻读了好几遍…… ...

  2. 【POI每日题解 #7】TES-Intelligence Test

    题目链接 这道题第一眼看去类比BANK-Cash Dispenser 不过1e6 * 1e6 = 1e12   分分钟MLE啊 想到优化 就yy到一种近似主席树的做法 来维护类似BANK的一堆序列 开 ...

  3. 【POI每日题解 #9】SKA-Piggy Banks

    题目链接 题意: 有一棵环套树 求最少从多少个节点出发能沿边走过整棵树 环套树 并查集求联通块 有几块就砸几个 太简单不发代码了 不过某大佬的环套树找环dfs让我研究了好久… 贴一下以Orz #inc ...

  4. 【POI每日题解 #6】KRA-The Disks

    题目链接 : [POI2006]KRA-The Disks 好有既视感啊... 注意一下输入输出 输入是从上到下输入箱子的宽度 输出是最上面的积木停在哪一层 即 箱子高度 - 积木高度 + 1 在初始 ...

  5. 【POI 每日题解 #4】 [POI2008]MAF-Mafia

    [POI2008]MAF-Mafia 很容易看出是拓扑 但不容易想出来怎么做[可能是我太菜 首先 入度为零的人是肯定死不了的 接着 我们分成环和链分析 对于一个链 最多的情况就是顺着一个个开枪 最后剩 ...

  6. 每日题解: 两数之和 & 有效的括号

  7. 算法(第四版)C# 习题题解——1.1

    写在前面 整个项目都托管在了 Github 上:https://github.com/ikesnowy/Algorithms-4th-Edition-in-Csharp 善用 Ctrl + F 查找题 ...

  8. POI 读取Excel数据

    private List<LeagueGroup> read() throws IOException{ List<LeagueGroup> leagueGroups=new ...

  9. NPOI使用手册[转]

    NPOI使用手册 目录 1.认识NPOI 2. 使用NPOI生成xls文件 2.1 创建基本内容 2.1.1创建Workbook和Sheet 2.1.2创建DocumentSummaryInforma ...

随机推荐

  1. SQL Server-聚焦深入理解死锁以及避免死锁建议(转载)

    前言 终于进入死锁系列,前面也提到过我一直对隔离级别和死锁以及如何避免死锁等问题模棱两可,所以才鼓起了重新学习SQL Server系列的勇气,本节我们来讲讲SQL Server中的死锁,看到许多文章都 ...

  2. Kubernetes-v1.12.0基于kubeadm部署

    1.主机规划 #master节点(etcd/apiserver/scheduler/controller manager)master.example.cometh0: 192.168.0.135et ...

  3. Luogu4156 WC2016 论战捆竹竿 KMP、同余类最短路、背包、单调队列

    传送门 豪华升级版同余类最短路-- 官方题解 主要写几个小trick: \(1.O(nm)\)实现同余类最短路: 设某一条边长度为\(x\),那么我们选择一个点,在同余类上不断跳\(x\),可以形成一 ...

  4. React-使用combineReducers完成对数据对拆分管理

    数据都放在reducer.js下不利于对数据进行管理,可以把一个大的reducer.js拆分成多个小的reducer.js. 小的reducer.js const defaultState={ foc ...

  5. 读取Excel的记录并导入SQL数据库

    准备一下,近段时间,需要把Excel的数据导入数据库中. 引用命名空间: using System.Configuration; using System.Data; using System.Dat ...

  6. thymeleaf给bootstrap自定义变量赋值

    最近在做一件事情,前端用的是thymeleaf进行渲染,thymeleaf是通过 th的标签来赋值对应的后端变量的.但是遇到一个尴尬的问题,bootstrap是可以通过data-xxx,来自定义变量的 ...

  7. TRIO-basic变量的状态位

    TRIO运动控制器在应用中,我们一般会用一个VR寄存器的状态位来控制一些报警信号,这样有利于代码的优化,同时和触摸屏设置报警信息大大的方便和节约时间. 首先测试了一下一个寄存器可以设置多少个状态位. ...

  8. Linux下性能调试工具运维笔记

    作为一名资深的linux运维工程师,为方便了解和追求服务器的高性能,如cpu.内存.io.网络等等使用情况,要求运维工程师必须要熟练运用一些必要的系统性能调试工具,liunx下提供了众多命令方便查看各 ...

  9. Kruskal算法-HDU1863畅通工程

    链接 [http://acm.hdu.edu.cn/showproblem.php?pid=1863] 题意 Problem Description 省政府"畅通工程"的目标是使全 ...

  10. 对spring cloud config的一点理解

    以下部分纯属个人理解,但是结果都是经过demo验证. 一.spring cloud config介绍 spring cloud是spring家族中的一个微服务工具包,其中包含了很多微服务的工具.偏向于 ...