「CF547D」 Mike and Fish

传送门

介绍三种做法。


\(\texttt{Solution 1}\) 上下界网络流

我们将每一行、每一列看成一个点。

两种颜色的数量最多相差 \(1\),即红点的个数和蓝点个数范围都在 \([\lfloor \frac{cnt}{2}\rfloor,\lceil \frac{cnt}{2}\rceil]\) 当中。

若有一个点 \((x,y)\),则从第 \(x\) 行向第 \(y\) 列连边,容量为一。若有流量,则为红点,否则为蓝点。

最后从源点向行连边,从列向汇点连边,跑一边有源汇上下界可行流即可。


\(\texttt{Solution 2}\) 二分图染色

我们将同一行的点两两配对,将同一列的点两两配对,其形成一定是一个二分图。

考虑证明:每个点最多连出两条边:横边和竖边。而由此易证得这张图上的环一定是横竖边交替排列的,即所有的环都为偶环。

所以我们对这张二分图进行黑白染色,每一行和每一列最多有一个点为孤立点,符合题目要求。

(是真的妙啊)

贴代码

/*---Author:HenryHuang---*/
/*---Never Settle---*/
#include<bits/stdc++.h>
#define add(a,b) e[a].emplace_back(b)
using namespace std;
const int maxn=2e5+5;
int lstx[maxn],lsty[maxn];
int col[maxn];
vector<int> e[maxn];
void dfs(int u,int co){
col[u]=co;
for(auto v:e[u])
if(col[v]==-1)
dfs(v,co^1);
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int n;cin>>n;
for(int i=1;i<=n;++i) col[i]=-1;
for(int i=1;i<=n;++i){
int x,y;cin>>x>>y;
if(lstx[x]){
add(lstx[x],i),add(i,lstx[x]);
lstx[x]=0;
}
else lstx[x]=i;
if(lsty[y]){
add(lsty[y],i),add(i,lsty[y]);
lsty[y]=0;
}
else lsty[y]=i;
}
for(int i=1;i<=n;++i) if(col[i]==-1) dfs(i,0);
for(int i=1;i<=n;++i) cout<<(col[i]?"r":"b");
return 0;
}

\(\texttt{Solution 3}\) 欧拉回路

将横纵坐标之间连边,问题转化为对每条边定向使得每个点的入度和出度最多相差 \(1\)。

这和 CF527E 很像,只是有一个最多相差 \(1\) 的条件。

考虑若一个点度数为偶数,则其入度和出度必然相等。

所以我们考虑如何处理一个点度数为奇数的情况。

我们新建一些虚边,将这些奇点两两配对,然后跑欧拉回路即可。

「CF547D」 Mike and Fish的更多相关文章

  1. Gorgerous -「歌词」留言板

    歌者,献祭「心声」,以沐浴「新生」. Oh love. How I miss you every single days when I see you on those streets. Oh lov ...

  2. 「译」JUnit 5 系列:条件测试

    原文地址:http://blog.codefx.org/libraries/junit-5-conditions/ 原文日期:08, May, 2016 译文首发:Linesh 的博客:「译」JUni ...

  3. 「译」JUnit 5 系列:扩展模型(Extension Model)

    原文地址:http://blog.codefx.org/design/architecture/junit-5-extension-model/ 原文日期:11, Apr, 2016 译文首发:Lin ...

  4. JavaScript OOP 之「创建对象」

    工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程.工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题. function createPers ...

  5. 「C++」理解智能指针

    维基百科上面对于「智能指针」是这样描述的: 智能指针(英语:Smart pointer)是一种抽象的数据类型.在程序设计中,它通常是经由类型模板(class template)来实做,借由模板(tem ...

  6. 「JavaScript」四种跨域方式详解

    超详细并且带 Demo 的 JavaScript 跨域指南来了! 本文基于你了解 JavaScript 的同源策略,并且了解使用跨域跨域的理由. 1. JSONP 首先要介绍的跨域方法必然是 JSON ...

  7. 「2014-5-31」Z-Stack - Modification of Zigbee Device Object for better network access management

    写一份赏心悦目的工程文档,是很困难的事情.若想写得完善,不仅得用对工具(use the right tools),注重文笔,还得投入大把时间,真心是一件难度颇高的事情.但,若是真写好了,也是善莫大焉: ...

  8. 「2014-3-18」multi-pattern string match using aho-corasick

    我是擅(倾)长(向)把一篇文章写成杂文的.毕竟,写博客记录生活点滴,比不得发 paper,要求字斟句酌八股结构到位:风格偏杂文一点,也是没人拒稿的.这么说来,arxiv 就好比是 paper 世界的博 ...

  9. 「2014-3-17」C pointer again …

    记录一个比较基础的东东-- C 语言的指针,一直让人又爱又恨,爱它的人觉得它既灵活又强大,恨它的人觉得它太过于灵活太过于强大以至于容易将人绕晕.最早接触 C 语言,还是在刚进入大学的时候,算起来有好些 ...

随机推荐

  1. 使用Jprofiler分析Java项目的内存开销情况并利用强制回收控制内存

    一.问题背景 自己开发的Java项目中占用太多的Heap Space.即使在Eclipse的虚拟机参数中设置"-Xms128m -Xms2048m -XX:MetaspaceSize=512 ...

  2. CPU消耗,跟踪定位理论与实践

    CPU消耗,跟踪定位理论与实践 一.性能指标之资源指标定位方案 1.打tprof报告方法 抓取perfpmr文件 60秒. perfpmr.sh 60 从结果文件中取出tprof.sum 或直接抓取t ...

  3. Camera Calibration 相机标定

    Camera Calibration 相机标定 一.相机标定方法 在opencv中提供了一组函数用于实现相机的标定,标定返回的值包括:相机内参矩阵(fx fy xc yc).相机外参矩阵(R t)以及 ...

  4. 卷积神经网络(CNN,ConvNet)

    卷积神经网络(CNN,ConvNet) 卷积神经网络(CNN,有时被称为 ConvNet)是很吸引人的.在短时间内,变成了一种颠覆性的技术,打破了从文本.视频到语音等多个领域所有最先进的算法,远远超出 ...

  5. MindSpore静态图语法支持

    MindSpore静态图语法支持 概述 在Graph模式下,Python代码并不是由Python解释器去执行,而是将代码编译成静态计算图,然后执行静态计算图. 关于Graph模式和计算图,可参考文档: ...

  6. Springboot-Redis分布式锁 -----StringRedisTemplate

    这里引用别人, 用来自己回忆 https://blog.csdn.net/jack_shuai/article/details/91986690 https://www.cnblogs.com/mox ...

  7. 用MAILX 发送邮件

    使用 25 端口发送 mail 编辑/etc/mail.rc 文件,添加以下信息vi /etc/mail.rc set from=xxx@163.com smtp=smtp.163.comset sm ...

  8. 【Azure 机器人】微软Azure Bot 编辑器系列(1) : 创建一个天气对话机器人(The Bot Framework Composer tutorials)

    欢迎来到微软机器人编辑器使用教程,从这里开始,创建一个简单的机器人. 在该系列文章中,每一篇都将通过添加更多的功能来构建机器人.当完成教程中的全部内容后,你将成功的创建一个天气机器人(Weather ...

  9. 【VBA】模块更新方法

    删除模块,重新导入 1 Sub 更新模块() 2 With ThisWorkbook.VBProject 3 .VBComponents.Remove .VBComponents("模块1& ...

  10. Spring Boot WebFlux-06——WebFlux 整合 Redis

    第06课:WebFlux 整合 Redis 前言 上一篇内容讲了如何整合 MongoDB,这里继续讲如何操作 Redis 这个数据源,那什么是 Reids? Redis 是一个高性能的 key-val ...