CF547D Mike and Fish(图论建模)

news/2024/10/7 21:31:57/文章来源:https://www.cnblogs.com/dcytrl/p/18450669

题意

二维平面上有 \(n\) 个点 \((x_i,y_i)\),你需要给每个点染色红色或蓝色使得每一行、每一列上红蓝点数差小于等于 1。

\(n,x_i,y_i\le 2\times10^5\)

分析

方法一:上下界网络流

对所有行和列建点,\(x_i\rightarrow y_i\) 连边,流量 \([0,1]\),有流量表示染红。源点向行点连边,流量 \([\lfloor\frac{p_i}{2}\rfloor,\lceil\frac{p_i}{2}\rceil]\)\(p_i\)\(i\) 行点数,表示染的红点数量必须要在这段区间内与蓝点数量的差才合法。列点向汇点连边,流量同理。

方法二:欧拉回路

可能是一个经典套路。套路性的建行点列点,\(x_i,y_i\) 间连一条无向边。但是这个建模不是很能契合欧拉回路的特征(可能会有奇度点)。不难发现若一行有奇数个点那么两两配对后剩下的点可以随便选,新建一个虚点将所有奇点连向它即可。现在所有点度数为偶,任选起点跑欧拉回路即可,颜色根据边的经过方向定。

方法三:二分图染色

我认为非常优美的思路,我想不到

将一行内的点两两配对,剩下一个点不管。列同理。

可以证明该图为二分图。

感性证明:根据建模,一个点只会跟至多一个与它同横坐标的点和至多一个与它同纵坐标的点连边。假设有点 \((x,y)-(x,z),y\neq z\),由于 \((x,z)\) 已经跟一个横坐标与其相同的点连过边了,那么另一条出边必然和其纵坐标相同,以此类推,当走到与 \((x,y)\) 同侧的点时,其与其入点的纵坐标相同,故若形成奇环,那么这个点一定要和 \((x,y)\) 连边。而 \((x,y)\) 的横坐标边已经跟 \((x,z)\) 相连了,这与一行内点两两匹配的建模方式相悖,因此得证。

给出方法三代码,非常好写:

int n;
vector<int>G[maxn];
int lstx[maxn],lsty[maxn];
int col[maxn];
void dfs(int x,int c){col[x]=c;for(int u:G[x])if(!col[u])dfs(u,-c);
}
inline void solve_the_problem(){n=rd();rep(i,1,n){int x=rd(),y=rd();if(!lstx[x])lstx[x]=i;else G[lstx[x]].emplace_back(i),G[i].emplace_back(lstx[x]),lstx[x]=0;if(!lsty[y])lsty[y]=i;else G[lsty[y]].emplace_back(i),G[i].emplace_back(lsty[y]),lsty[y]=0;}rep(i,1,n)if(!col[i])dfs(i,1);rep(i,1,n)pc(col[i]==1?'r':'b');
}

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

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

相关文章

期末考试复习宝典P19题7:特征图大小的计算(当计算得到小数时)

https://blog.csdn.net/qfqf123456/article/details/112389559#:~:text=本文介绍了如何计算卷 题目:输入图片大小为200乘200,依次经过一层卷积(kernel size 5乘5, padding 1,stride 2),pooling(kernel size 3乘3, padding 0,stride 1),又一层卷积(kernel size 3乘3, …

IDEA如何快速定位到当前打开文件所在的目录

前言 我们在使用IDEA开发时,经常需要知道当前打开的文件是在哪个目录,这个可以在上方看到具体的目录。 但是,当我们需要知道这个目录下有哪些文件或者想要复制当前文件的时候,就需要快速定位当前文件的目录了。 那么,我们应该如何操作呢? 如何操作定位当前打开文件目录 首…

Vulnhub 靶机 THE PLANETS: EARTH

0x01信息收集 1.1、nmap扫描 IP段扫描,确定靶机地址 平扫描 nmap 192.168.1.0/24扫描结果(部分) Nmap scan report for earth.local (192.168.1.129) Host is up (0.0015s latency). Not shown: 983 filtered tcp ports (no-response), 14 filtered tcp ports (admin-prohib…

基于 Prometheus+Grafana+Alertmanager 搭建 K8S 云监控告警平台(附配置告警至QQ、钉钉)

目录一、机器规划二、部署安装 node-exporter、prometheus、Grafana、kube-state-metrics1、创建 monitor-sa 命名空间2、安装node-exporter组件2.1、说明2.2、应用资源清单2.3、通过node-exporter采集数据3、k8s 集群中部署 prometheus3.1、创建一个 sa 账号3.2、将 sa 账号 m…

2024.10.7 鲜花

【UNR #3】百鸽笼【UNR #3】百鸽笼花の塔 君が持ってきた漫画 くれた知らない名前のお花 今日はまだ来ないかな? 初めての感情知ってしまった 窓に飾った絵画をなぞってひとりで宇宙を旅して それだけでいいはずだったのに 君の手を握ってしまったら 孤独を知らないこの街には…

基于 Prometheus+Grafana+Alertmanager 搭建 K8S 云平台系统(附配置告警至QQ、钉钉)

目录一、机器规划二、部署安装 node-exporter、prometheus、Grafana、kube-state-metrics1、创建 monitor-sa 命名空间2、安装node-exporter组件2.1、说明2.2、应用资源清单2.3、通过node-exporter采集数据3、k8s 集群中部署 prometheus3.1、创建一个 sa 账号3.2、将 sa 账号 m…

软件工程第二次结对作业

软件工程 https://edu.cnblogs.com/campus/fzu/SE2024作业要求 https://edu.cnblogs.com/campus/fzu/SE2024/homework/13281作业目标 基于第一次结对作业项目程序的实现学号 102201127合作伙伴 102201129项目分工: 102201129周鑫: 前端开发: 设计和实现用户界面。 确保界面响…

20241007

sequence 我们会发现,我们每次删的一定是长度最短的那个,所以我们可以最开始按照长的排一下序,然后用线段树维护每一个区间中还有几个数,每次加上答案后在两个端点打上标记即可 #include <bits/stdc++.h> #define _1 (__int128)1using namespace std; using ll = long lo…

软件工程week2课程作业|“物品复活“软件开发

“物品复活”软件开发 作业要求 大学生经常有些物品觉得扔掉可惜,不处理又觉得浪费自己的地方。请你编写一个物品“复活”软件 该程序允许添加物品的信息(物品名称,物品描述,联系人信息),删除物品的信息,显示物品列表,也允许查找物品的信息 你实现的程序可以采用命令行…

[42] (多校联训) A层冲刺NOIP2024模拟赛03

今天的乐子今天的乐子2 昨天晚上做梦 梦见自己被关进戒网瘾学校 里面的老师全和疯子一样 然后我和这帮疯子老师比疯 疯子老师发现他们没我疯 所以就把我放了今天的乐子3 lhx 罗曼蒂克的辟谷A.五彩斑斓 赛时的想法 \(n^4\) 的做法,设 \(f_{i,j,k,l}\) 表示以 \((i,j)\) 为左上角…

Metasploit渗透测试框架学习(一)基本使用教程

1.Metasploit框架结构 1.1总览基础库文件Rex为最底层,实现网络套接字、网络应用协议、客户端服务端交互、数据库支持等 framework-core实现与上层模块交互的接口 framework-base对framework-core的扩展封装,用于提供各种接口供用户调用基于framework-base实现的六大模块Explo…

统计学(十三)——相关分析

img { display: block; margin-left: auto; margin-right: auto } table { margin-left: auto; margin-right: auto } 相关分析是用于研究多个变量之间相互关系的统计方法,最早由英国统计学家卡尔皮尔逊(Karl Pearson)于1896年提出。皮尔逊通过对变量间线性关系的深入研究,…