\(\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. Go语言系列之标准库log

    Go语言内置的log包实现了简单的日志服务.本文介绍了标准库log的基本使用. 使用Logger log包定义了Logger类型,该类型提供了一些格式化输出的方法.本包也提供了一个预定义的" ...

  2. 服务限流 -- 自定义注解基于RateLimiter实现接口限流

    1. 令牌桶限流算法 令牌桶会以一个恒定的速率向固定容量大小桶中放入令牌,当有浏览来时取走一个或者多个令牌,当发生高并发情况下拿到令牌的执行业务逻辑,没有获取到令牌的就会丢弃获取服务降级处理,提示一个 ...

  3. iView 用renderContent自定义树组件

    iview的树组件在有默认选中状态的时候默认选中状态的样式改变有bug,默认选中的样式不好看,鉴于此,有renderContent来改造iview的树组件, 效果如图 代码如下 <templat ...

  4. 安装TestNG

    1.启动Eclipse,选择"Help"-->'Install New Software' 2.在谈出的弹框中选择"Add" 3.在弹出的"Ad ...

  5. TestNG中 ITestListener 的使用

    1.关于testng中ITestListener 的相关介绍文档,请参考: http://javadox.com/org.testng/testng/6.8.7/org/testng/ITestLis ...

  6. css中两种居中方式text-align:center和margin:0 auto 的使用场景

    关于使用text-align:center和margin:0 auto 两种居中方式的比较 前言:最近由于要学习后端,需要提前学习一部分前端知识,补了补css知识,发现狂神在讲这一部分讲的不是特别清楚 ...

  7. 【解决了一个小问题】alpine镜像中,busybox的date命令获取昨天的日期

    直接上答案: date -d@"$(( `date +%s`-86400))" +"%Y-%m-%d"

  8. MySQL的MyISAM与InnoDB的索引方式

    在MySQL中,索引属于存储引擎级别的概念,不同存储引擎对索引的实现方式是不同的,本文主要讨论MyISAM和InnoDB两个存储引擎的索引实现方式. MyISAM索引实现 MyISAM引擎使用B+Tr ...

  9. GeoServer课程规划

    "凡事豫则立,不豫则废." --西汉·戴圣<礼记·中庸> 为了做好GeoServer课程培训,需要拟定一个课程目录,对整个课程做一个宏观上的规划.有了这个规划,就有了目 ...

  10. golang中结构体当做函数参数或函数返回值都会被拷贝

    1. 结构体做函数的参数或返回值时,都会被重新拷贝一份如果不想拷贝,可以传递结构体指针 package main import "fmt" type Person struct { ...