首页 > 其他分享 >Luogu P5089 [eJOI2018] 元素周期表 题解

Luogu P5089 [eJOI2018] 元素周期表 题解

时间:2022-10-04 11:12:21浏览次数:78  
标签:eJOI2018 二分 规律 题解 元素 拓展 Luogu define

(从洛谷博客搬过来的)


这道题嘛..主要还是找性质推规律。

拿到题,第一眼:噢噢爆搜啊。

第二眼:噢噢贪心啊。

第三眼:很好贪心假了。然后苦思冥想半个小时去看题解。

看到兔队的题解直接蚌了。二分图?

仔细思考了一下也是。\(x\text{、}y\) 坐标显然可以分成两个没有直接边相连的集合,而我们要做的就是将给出的点的 \(x\text{、}y\) 坐标连边,找规律。

考虑这样一张图。

# * * *
# # * *
* * * #

(#是已有的元素,*是空)

画成二分图是这样的:

然后我们把能够拓展的点都合成一下,变成了这样:

# # * *
# # * *
* * * #

再画一下二分图:

发现了一个小规律。就是说能够拓展的点加入后对原图的连通性不产生影响,不过似乎这个规律并不是我们想要找的最终规律,我们且称这个规律为规律一。

那么继续探索。

如果我们在 \(row_3\) 和 \(column_2\) 之间连一条边,也就是买一个元素 \((3,2)\),图会变成这样:

# # * *
# # * *
* # * #

拓展一下变成:

# # * #
# # * #
# # * #

如果只画给出的点和新买的点,二分图为:

如果画上新拓展的点,二分图变为:

然后发现了规律:如果某一行和某一列是联通的(不一定直接有边相连),那么他们之间就将会有边直接相连。

考虑这个规律的实际意义。

有边直接相连就代表着这个点 \((row_i,column_j)\) 在图中是已经获得的元素。那么如果整张图是联通的,那是不是意味着所有的点就都是已经获得的元素?!

确实如此。那么称这个规律为规律二,这就是我们想要找的最终规律。

那么我们想要的答案就是使得原图变为一个连通图的最小连边数,也就是联通分量数\(-1\)。

至此此题就基本做完了。首先按照规律一,我们无需多余地去拓展,只需要将给出的点进行建边。建好边后直接求一下联通分量个数就好了。

PS:其实没必要把边建出来,直接用一个并查集维护即可。

#include <iostream>
#define GMY (520&1314)
#define FBI_OPENTHEDOOR(x) freopen(#x ".in", "r", stdin), freopen(#x ".out", "w", stdout);
#define re register int
#define char_phi signed
#define N 200005
using namespace std;
inline void Fastio_setup(){ios::sync_with_stdio(false); cin.tie(NULL), cout.tie(NULL);}
int n, m, num, jia, final_ans;
int fa[N<<1];
int find(int x){return ((fa[x] == x) ? (x) : (fa[x] = find(fa[x])));}
inline void work(){
	cin >> n >> m >> num; jia = n;
	for (re i = 1 ; i <= n+m ; ++ i)
		fa[i] = i;
	for (re i = 1, x, y ; i <= num ; ++ i){
		cin >> x >> y;
		x = find(x), y = find(y+jia);
		fa[x] = y;
	}
	for (re i = 1 ; i <= n+m ; ++ i)
		if (fa[i] == i)
			final_ans ++;
	cout << final_ans-1 << endl;
}
// #define IXINGMY
char_phi main(){
	#ifdef IXINGMY
		FBI_OPENTHEDOOR(a);
	#endif
	Fastio_setup();
	work();
	return GMY;
}

标签:eJOI2018,二分,规律,题解,元素,拓展,Luogu,define
From: https://www.cnblogs.com/charphi/p/16753448.html

相关文章

  • CF1427E Xum 题解
    (从洛谷博客搬过来的)学校比赛的时候考了这道题,我当然是一分没得。这是一道好构造题。先不说正解,我看别的题解都没有说怎么拿部分分,但是如果赛时不会正解,那么拿部分分就......
  • Luogu P6937 [ICPC2017 WF]Secret Chamber at Mount Rushmore
    (从洛谷博客搬过来的)简要题意:告诉你可以从哪些字符转化为哪些字符,然后再问你某一个字符串能否转化为另一个字符串。这里提供两种做法:爆搜和传递闭包。算法一爆搜看到......
  • “科林明伦杯”哈尔滨理工大学暑假训练赛 F 题解
    题目内容传送门前置知识组合数乘法逆元Modularint模板题目分析分析输入与题意,本题关键即在推导有多少个不同数组的计算公式。设当前数组最大值为i,则有:\[ans_i......
  • CSP模拟练习赛1 https://www.luogu.com.cn/contest/82861#problems
    P1321单词覆盖还原简单思路字符串#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>#include<map>#definelllonglon......
  • 洛谷 P8557 炼金术 题解
    题目大意给定\(n\)种金属,放进\(k\)个熔炉,要求最终每种金属都要能从熔炉里拿出来,求熔炉炼金的方案数对\(998244353\)取模。分析从金属角度考虑。不难发现对于每......
  • 2019上半年(上午)网络工程师试题解析
    2019上半年(上午)网络工程师试题解析1.计算机执行指令的过程中,需要由( )产生每条指令的操作信号,并将信号送往相应的部件进行处理,以完成指定的操作。A.CPU的控制器 B.CPU的......
  • 【合集】AtCoder 比赛题解
    PartAABCABC266(A-Ex)ABC267(A-G)ABC268(A-D)ABC269(A-F)ABC270(D-E)ABC271(C-F)PartBARCARC148(C)......
  • Luogu P3469 [POI2008]BLO-Blockade(tarjan求割点)
    题目链接:https://www.luogu.com.cn/problem/P3469 [POI2008]BLO-Blockade题面翻译B城有$n$个城镇,$m$条双向道路。每条道路连结两个不同的城镇,没有重复的道路,所有......
  • CF1394C 题解
    传送门题意太长不说了。题解因为两个字符串相似的充要条件是任意重排,故可以不考虑\(B\)与\(N\)的相对顺序,只需记录各自的数量。以二者的数量建立坐标系,则一个字符......
  • 2020-2021 Winter Petrozavodsk Camp, Belarusian SU Contest (XXI Open Cup, Grand P
    AC题目列表C.BraveSeekersofUnicornsD.BankSecurityUnificationG.BiologicalSoftwareUtilitiesI.BinarySupersonicUtahraptorsJ.Bur......