\(\mathcal{Description}\)

  Link.

  给定二分图 \(G=(X\cup Y,E)\),求对于边的一个染色 \(f:E\rightarrow\{1,2,\dots,c\}\),最小化每个结点所染颜色数量极差之和。输出这一最小值。

  \(|X|+|Y|,|E|\le10^6\)。

\(\mathcal{Solution}\)

  基于“结论好猜”就能认为这题是签到题吗……

  答案显然有下界 \(\sum_{u}\left[c\not\mid \sum_{v}[(u,v)\in E]\right]\)。由于写一发过掉了大样例,我们尝试证明它必然可取到。

证明

  **引理(对于二分图的 Vizing 定理):** 对于二分图 $G$,$\chi'(G)=\Delta(G)$,其中 $\chi'(G)$ 为 $G$ 的边染色的色数,$\Delta(G)$ 为 $G$ 中结点的最大度数。

  证明: 给出构造。按任意顺序枚举 \((x,y)\in E\),令 \(p\) 为 \(x\) 的邻接边中未染的最小颜色,\(q\) 为 \(y\) 的邻接边中未染的最小颜色。由于 \(\chi'(G)=\Delta(G)\),\(p,q\) 是存在的。

  1. 若 \(p=q\),令 \(f((x,y))=p\)。
  2. 若 \(p\not=q\),不妨令 \(p>q\),必然存在增广路 \(P=\lang x_1=x,y_1,x_2,y_2,\cdots,x_k\rang\),满足 \(\forall i\in[1,k),f((x_i,y_i))=p\land f((y_i,x_{i+1}))=q\)。同时,亦有 \(y\not\in P\)。我们翻转这条路径的边染色,即 \(f((x_i,y_i))\leftarrow q,f((y_i,x_{i+1}))\leftarrow p\)。此时可套用讨论 1.。

  综上,每条边都能被染色且不出现共色的邻接边。命题得证。 \(\square\)

  尝试将原命题向引理靠拢。令新图 \(G'\) 初始为 \(G\)。依次枚举 \(G'\) 中的结点 \(x\),尝试将其拆点。设 \(x\) 的邻接点集为 \(\operatorname{adj}(x)\),任取它的一个划分 \(S=\{S_1,\cdots,S_k\}\),满足 \(|S_1|=\cdots=|S_{k-1}|=c\),若 \(k>1\),则令 \(V_{G'}\leftarrow V_{G'}\cup\{x_1,\cdots,x_k\}\setminus\{x\}\),且 \(\operatorname{adj}(x_i)\leftarrow S_i\)。注意若 \(x\) 已是拆出的点,那么必然不会导致图的变动,拆点是可完成的。

  此后,发现 \(\Delta(G')\le c\) 且 \(G'\) 依旧是二分图。由引理,\(\chi'(G)=\Delta(G)\),我们取出这样一个染色 \(f\),将拆点合并回原图 \(G\) 且不改变边染色,显然 \(f\) 取到了答案下界。 \(\square\)

  \(\mathcal O(|X|+|Y|+|E|)\) 算一算就好。

\(\mathcal{Code}\)

/*~Rainybunny~*/

#ifndef RYBY
#pragma GCC optimize( "Ofast" )
#endif #include <bits/stdc++.h> #define rep( i, l, r ) for ( int i = l, rep##i = r; i <= rep##i; ++i )
#define per( i, r, l ) for ( int i = r, per##i = l; i >= per##i; --i ) inline char fgc() {
static char buf[1 << 17], *p = buf, *q = buf;
return p == q && ( q = buf + fread( p = buf, 1, 1 << 17, stdin ), p == q )
? EOF : *p++;
} inline int rint() {
int x = 0, s = fgc();
for ( ; s < '0' || '9' < s; s = fgc() );
for ( ; '0' <= s && s <= '9'; s = fgc() ) x = x * 10 + ( s ^ '0' );
return x;
} const int MAXN = 1e6;
int n, m, k, c, deg[MAXN + 5]; int main() {
freopen( "qiandao.in", "r", stdin );
freopen( "qiandao.out", "w", stdout ); n = rint(), m = rint(), k = rint(), c = rint();
rep ( i, 1, k ) {
int u = rint(), v = rint();
++deg[u], ++deg[v + n];
}
int ans = 0;
rep ( i, 1, n + m ) ans += !!( deg[i] % c );
printf( "%d\n", ans );
return 0;
}

Solution -「多校联训」签到题的更多相关文章

  1. Solution -「多校联训」Sample

    \(\mathcal{Description}\)   Link   (稍作简化:)对于变量 \(p_{1..n}\),满足 \(p_i\in[0,1],~\sum p_i=1\) 时,求 \(\ma ...

  2. Solution -「多校联训」排水系统

    \(\mathcal{Description}\)   Link.   在 NOIP 2020 A 的基础上,每条边赋权值 \(a_i\),随机恰好一条边断掉,第 \(i\) 条段的概率正比于 \(a ...

  3. Solution -「多校联训」I Love Random

    \(\mathcal{Description}\)   给定排列 \(\{p_n\}\),可以在其上进行若干次操作,每次选取 \([l,r]\),把其中所有元素变为原区间最小值,求能够得到的所有不同序 ...

  4. Solution -「多校联训」朝鲜时蔬

    \(\mathcal{Description}\)   Link.   破案了,朝鲜时蔬 = 超现实树!(指写得像那什么一样的题面.   对于整数集 \(X\),定义其 好子集 为满足 \(Y\sub ...

  5. Solution -「多校联训」假人

    \(\mathcal{Description}\)   Link.   一种物品有 长度 和 权值 两种属性,现给定 \(n\) 组物品,第 \(i\) 组有 \(k_i\) 个,分别为 \((1,a ...

  6. Solution -「多校联训」古老的序列问题

    \(\mathcal{Description}\)   Link.   给定序列 \(\{a_n\}\),和 \(q\) 次形如 \([L,R]\) 的询问,每次回答 \[\sum_{[l,r]\su ...

  7. Solution -「多校联训」自动机

    \(\mathcal{Description}\)   Link.   有一个状态集为 \(V\) 的自动机,状态接收 (, ) 和 _(空格) 三种字符,分别编号为 \(0,1,2\),状态 \(u ...

  8. Solution -「多校联训」战神归来

    \(\mathcal{Description}\)   Link.   一条地铁线路上共 \(m\) 个站点,\(n\) 个人乘坐地铁,第 \(i\) 个人需要从 \(s_i\) 站坐到 \(e_i\ ...

  9. Solution -「多校联训」消失的运算符

    \(\mathcal{Description}\)   Link.   给定长度为 \(n\) 的合法表达式序列 \(s\),其中数字仅有一位正数,运算符仅有 - 作为占位.求将其中恰好 \(k\) ...

随机推荐

  1. Shell 中的 expect 命令

    目录 expect 介绍 expect 安装 expect 语法 自动拷贝文件到远程主机 示例一 示例二 示例三 示例四 expect 介绍 借助 expect 处理交互的命令,可以将交互过程如 ss ...

  2. Struts2的jsonp接口实例

    和以往写struts2程序一样,action方法跳转到一个JSP中,为了配合jsonp的跨域,要在JSP中做一个输出 JSP: <%@ page language="java" ...

  3. centos7 RPM命令使用

    rpm -qa 软件名称 ---查看软件是否安装成功 rpm -ql  软件名称 ---查看软件中都有什么 rpm -qf  文件名称(绝对路径) ---查看属于哪个软件 rpm -ivh 包     ...

  4. 注意,你所做的 A/B 实验,可能是错的!

    对于 A/B 实验原理认知的缺失,致使许多企业在业务增长的道路上始终在操作一批"错误的 A/B 实验".这些实验并不能指导产品的优化和迭代,甚至有可能与我们的初衷背道而驰,导致&q ...

  5. 在asp.net webfrom 中完成用户自定义导出

    asp.net原生控件实现自定义列导出功能 自定义列实现 最近负责开发公司内部使用的人事信息化系统时,有一个需求是这样的,需要在页面中可以用户每次导出Excel时自定义需要导出哪些列,经过半天的琢磨和 ...

  6. 利用quake捡洞

    quake一开漏洞全靠捡 定位资产 通过主域名定位子域名资产 domain:"target.com" 通过C段定位资产 ip: "1.1.1.1/24" 通过证 ...

  7. ADD software version display

    ADD software version display ADD software version display1. Problem Description2. Analysis3. Solutio ...

  8. java基础04-数据类型扩展及面试题

    java基础04-数据类型扩展及面试题讲解 public class demo02 { public static void main(String[] args){ // 一.整数拓展: 进制 二进 ...

  9. 《剑指offer》面试题16. 数值的整数次方

    问题描述 实现函数double Power(double base, int exponent),求base的exponent次方.不得使用库函数,同时不需要考虑大数问题. 示例 1: 输入: 2.0 ...

  10. Javascript——ES6( ECMAScript 6.0)语法

    ES6( ECMAScript 6.0)语法 一.let/const与var的区别 var 会进行预解析,let/const不会 var可以声明两个重名的变量,let/const不能 var没有块级作 ...