有意思的网格图转化.CF Div.1 还是挺有难度的. 注:由于本题有较完美的中文题面,所以不贴英文题面. 英文题面 题目描述 Innopolis 大学的教授正努力研究元素周期表.他们知道,有 \(n \times m\) 种元素,形成了一个 \(n\) 行 \(m\) 列的矩阵. 研究表明,如果元素周期表上有一个元素 A,且元素 B 与它在同一列(A 与 B 不能在同一周期),元素 C 在同一周期(A 与 C 不能在同一列),那么,科学家就可以用这三种元素通过核聚变合成第四种元素 D 的样品,…
$CF1012B Chemical table 给你一个 \(n\times m\) 的矩形,一开始有 \(q\) 个格子上被标记.对于任意两行两列,如果交汇的四个格子中有三个被标记,那么第 \(4\) 个会被自动标记.问你至少需要手动标记几个格子,使得整个矩形内的格子都被标记. \(n,\ m,\ q\leq2\times10^5\) 并查集,构造 把元素 \((x,\ y)\) 看做二分图的一条边 \((x,\ n+y)\) 目标是将它变成完全二分图 而标记其他点的条件 \((x_1,\ y…
[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…
<题目链接> 题目大意:给定一个n*m的矩阵网格,向其中加点,对于一个组成矩形的四个点中如果有三个点中有元素,那么第四个点中会自动产生新的元素.问你最少再加多少个点能够填满这个网格.解题分析:不是很好想,先将行列看成两个集合,每次加点操作,就相当于x集合向y集合连了一条边.本题可以巧妙的转化为,要使x和y集合所有的点都连通最少需要添加几条边.初始情况需要n+m-1条边(因为两个集合有n+m个点,且相同集合不能连边).然后根据题目已经给出的边判断最终的连通块个数,用并查集来判连通.主要是这个转化…
[题解]CF742E (二分图+构造) 自闭了CodeForces - 742E 给定的条件就是一个二分图的模型,但是有一些不同.不同就不同在可以出现相邻两个点颜色相同的情况. 构造常用方法之一是按奇偶分类,就是尽管不同奇偶性的块之间会产生影响,但是我们先不管这些限制. 这道题里,假若奇偶块之内都能满足题目的限制,那么奇偶块之间也满足限制了.因为限制是不能存在三个联系相等,然而我们已经保证块内每两个不相等. 男女朋友连边. \(2i\)和\(2i-1\)连边. 然后跑二分图染色,考虑是否存在无解…
题目传送门:洛谷P5089. 题意简述: 一张 \(n \times m\) 的表格,有一些格子有标记,另外一些格子没有标记. 如果 \((r_1,c_1),(r_1,c_2),(r_2,c_1)\) (满足 \(r_1\ne r_2,c_1\ne c_2\))都有标记,那么可以不花费任何代价使得 \((r_2,c_2)\) 也有标记. 你也可以花费 \(1\) 的代价使得任意一个格子有标记. 问使得所有格子都有标记的最小花费 题解: 比赛时这题我想了很久,猜了一个奇怪的结论交上去就对了. 这里…
题目链接 题意及题解参见lrj训练指南 #include<bits/stdc++.h> using namespace std; ; int n,m; int dfn[maxn],low[maxn],time_tag; int bccno[maxn],bcc_cnt; int iscut[maxn]; int A[maxn][maxn]; vector<int> adj[maxn]; vector<int> bcc[maxn]; int odd[maxn]; struc…
题意 题目链接 Sol 可以这样考虑,在原图中没有边相连的点的值肯定是a / c 那么直接二分图染色即可 #include<bits/stdc++.h> #define LL long long using namespace std; const int MAXN = 1001, INF = 1e9 + 10; inline int read() { char c = getchar(); int x = 0, f = 1; while(c < '0' || c > '9') {…
http://poj.org/problem?id=2942 所写的tarjan练习题最难的一道. 说白了难在考得不是纯tarjan. 首先我们把仇恨关系处理成非仇恨关系的图,然后找双连通分量,在双连通分量里的点满足了任意一个人可以和两个(或以上)的人坐一起. 那么我们接下来要判断奇环. 发现性质:如果一个双连通分量有奇环,那么其中任意一点一定在某个奇环上. 也就是说,这些人拼一拼绝对能全部开会成功,我们把他们打上成功标志. 然后搜失败标志的人的个数即可. 判断奇环的方法显然二分图染色. #in…