cf1012B】的更多相关文章

$CF1012B Chemical table 给你一个 \(n\times m\) 的矩形,一开始有 \(q\) 个格子上被标记.对于任意两行两列,如果交汇的四个格子中有三个被标记,那么第 \(4\) 个会被自动标记.问你至少需要手动标记几个格子,使得整个矩形内的格子都被标记. \(n,\ m,\ q\leq2\times10^5\) 并查集,构造 把元素 \((x,\ y)\) 看做二分图的一条边 \((x,\ n+y)\) 目标是将它变成完全二分图 而标记其他点的条件 \((x_1,\ y…
有意思的网格图转化.CF Div.1 还是挺有难度的. 注:由于本题有较完美的中文题面,所以不贴英文题面. 英文题面 题目描述 Innopolis 大学的教授正努力研究元素周期表.他们知道,有 \(n \times m\) 种元素,形成了一个 \(n\) 行 \(m\) 列的矩阵. 研究表明,如果元素周期表上有一个元素 A,且元素 B 与它在同一列(A 与 B 不能在同一周期),元素 C 在同一周期(A 与 C 不能在同一列),那么,科学家就可以用这三种元素通过核聚变合成第四种元素 D 的样品,…
[Luogu-CF1012B] 还有重题 P5089[eJOI2018]元素周期表 题解原话 : 可以发现这个过程是不改变二分图中的连通分量的个数的 答案就是 连通分量数-1 证明 : 设一行或一列为一个点,每一个单独的行或列都可以通过一次操作搞满 #include<bits/stdc++.h> int n,m,q,x,y,S; int v[400001]; int h[400001],nxt[400001],to[400001],tot; inline void ins(int x,int…
我们可以将横坐标和纵坐标看成是点.发现这些点之间是有传递性的. 题中说明,如果有矩阵中三个顶点被选,则底角的点也会被覆盖,发现这些点之间是有传递性的.那么我们最终达到的目的就是使整个图中只有 111 个集合.而将两个集合合并的代价是新覆盖一个点.于是我们只需统计初始局面中图中有多少个集合,并输出集合数量 - 1 即可. Code: #include<cstdio> #include<iostream> using namespace std; const int maxn = 20…
/* 模拟二分图:每个点作为一条边,连接的是一列和一行(抽象成一个点,列在左,行在右) 由题意得 a-b相连,a-c相连,b-d相连,那么d-c就不用再相连了 等价于把二分图变成联通的需要再加多少边 用并查集可以解决 */ #include<bits/stdc++.h> using namespace std; #define maxn 400005 int F[maxn],n,m,q; int find(int x){ return F[x]==x?x:F[x]=find(F[x]); }…
题意简述: 给定一个 n×m的矩阵,其中 q 个位置已经被填充. 有一条规则,如果 (r1,c1) ,(r1,c2),(r2,c1) 均被填充,则 (r2,c2) 也被填充.任何被其他三个位置生成的位置,也可以继续生成其他位置.问最少需要再人为填充多少元素,使矩阵被填满. 这个题思维真的强 int fa[maxn]; int Find(int x){ return fa[x]==x?x:fa[x]=Find(fa[x]); } int main(){ int n,m,k; cin>>n>…