Chemical table CFR500 div2D(并查集)
给定的一个n*m的区域内,给出一些点的坐标,这些点上有一个元素,如果在矩形的子矩形的三个点都有元素,那么第四个点的元素可以自己产生,其他的元素需要购买,问最少需要购买多少中元素才可以把这个区域给填满。
对于给出点的,先用并查集把x轴上和y轴上有联系的点都联系起来,并且可以顺便把出现过的x和y的数值标记起来。
如果我把所有的点分成了n块,那么的需要添加n-1个元素来把这n块连接起来。对于没有出现的x和y的数值,我需要额外买一个元素来填充这个点。
因为我已经在一个块内的点一定是有联系的,而另一个块的点一定与这里面的点都没有联系,所以我只需要添加一个元素让他们的 x 或者 y 联系起来,那么这个块一定可以形成一个包含三个点的子矩形,也就可以产生出另一个点的元素。就可以把这些块里出现的x和y的横纵方向填满,这样就会剩下那么没有出现的x和y位置上的点还是空的了,然后同样的也只需要添加一个就可以填满一行或者一列。
#include<map>
#include<set>
#include<ctime>
#include<cmath>
#include<stack>
#include<queue>
#include<string>
#include<vector>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define lowbit(x) (x & (-x)) typedef unsigned long long int ull;
typedef long long int ll;
const double pi = 4.0*atan(1.0);
const int inf = 0x3f3f3f3f;
const int maxn = ;
const int maxm = ;
const int mod = ;
using namespace std; int n, m, tol, T;
int fa[maxn];
int X[maxn];
int Y[maxn]; int find(int x) {
return fa[x] == x ? x : fa[x] = find(fa[x]);
} void build(int x, int y) {
int u = find(x);
int v = find(y);
fa[v] = u;
} int main() {
int q;
scanf("%d%d%d", &n, &m, &q);
for(int i=; i<=q; i++) fa[i] = i;
int x, y;
for(int i=; i<=q; i++) {
scanf("%d%d", &x, &y);
if(X[x]) build(i, X[x]);
X[x] = fa[i];
if(Y[y]) build(i, Y[y]);
Y[y] = fa[i];
}
ll ans = -;
for(int i=; i<=q; i++)
find(i);
for(int i=; i<=q; i++)
if(fa[i] == i) ans++;
for(int i=; i<=n; i++)
if(!X[i]) ans++;
for(int i=; i<=m; i++)
if(!Y[i]) ans++;
printf("%I64d\n", ans);
return ;
}
Chemical table CFR500 div2D(并查集)的更多相关文章
- codeforces Codeforces Round #345 (Div. 1) C. Table Compression 排序+并查集
C. Table Compression Little Petya is now fond of data compression algorithms. He has already studied ...
- Codeforces Round #345 (Div. 1) C. Table Compression dp+并查集
题目链接: http://codeforces.com/problemset/problem/650/C C. Table Compression time limit per test4 secon ...
- codeforces 651E E. Table Compression(贪心+并查集)
题目链接: E. Table Compression time limit per test 4 seconds memory limit per test 256 megabytes input s ...
- Codeforces #345div1 C Table Compression (650C) 并查集
题意:给你一个n*m的矩阵,需要在不改变每一行和每一列的大小关系的情况下压缩一个矩阵,压缩后的矩阵所有数的总和尽量的小. 思路:我们有这样的初步设想:对于在一行或一列的数x,y,若x<y,则建立 ...
- Codeforces Round #345 (Div. 2) E. Table Compression(并查集)
传送门 首先先从小到大排序,如果没有重复的元素,直接一个一个往上填即可,每一个数就等于当前行和列的最大值 + 1 如果某一行或列上有重复的元素,就用并查集把他们连起来,很(不)显然,处于同一行或列的相 ...
- Codeforces 651E Table Compression【并查集】
题目链接: http://codeforces.com/problemset/problem/650/C 题意: 给定n*m的矩阵,要求用最小的数表示每个元素,其中各行各列的大小关系保持不变. 分析: ...
- Code Forces 650 C Table Compression(并查集)
C. Table Compression time limit per test4 seconds memory limit per test256 megabytes inputstandard i ...
- Codeforces Round #345 (Div. 2) E. Table Compression 并查集
E. Table Compression 题目连接: http://www.codeforces.com/contest/651/problem/E Description Little Petya ...
- Codeforces Round #345 (Div. 2) E. Table Compression 并查集+智商题
E. Table Compression time limit per test 4 seconds memory limit per test 256 megabytes input standar ...
随机推荐
- PAT L2-009 抢红包
https://pintia.cn/problem-sets/994805046380707840/problems/994805066890854400 没有人没抢过红包吧…… 这里给出N个人之间互 ...
- C# foreach内部原理
我们知道使用foreach的一个要求是对象必须继承自IEnumerable接口 这样才可以进行迭代 那内部是怎么实现的呢 这个时候会将对应的foreach语句转换为一个while循环 并且通过Move ...
- Mongo安装与使用
MongoDB[1] 是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. mongoDB MongoDB[2] 是一个介于关系数据库和非关系数 ...
- vue传参
<template> <ul> <li v-for="item in list" :key="item.id"> <b ...
- django migrate报错(提前删除表等)
python3 manage.py makemigrations python3 manage.py migrate ##报错 改为##更改migrates的状态 python3 manage.py ...
- Linux下4个查找命令which、whereis、locate、find的总结
(1)which [-a] cmdname1 cmdname2 ...... 作用:locate a command,从环境变量PATH中,定位/返回与指定名字相匹配的可执行文件所在的路径 ...
- solrcloud编辑zookeeper上的配置文件的方法
solrcloud的配置文件是上传在zookeeper文件系统上的.这样就面临一个问题,每次需要修改配置文件,就没有只有之前本地单机solr那么简单,需要上传. 搭建solrcloud时候提交配置文件 ...
- Linux 学习 (一) Linux简介
Linux达人养成计划 I 学习笔记 Linux 内核官网:www.kernel.org 内核版本说明:主版本.次版本.末版本,如2.6.18 Linux 主要发行版本 RedHat: 服务器领域,部 ...
- 转载:实现MATLAB2016a和M文件关联
转载自http://blog.csdn.net/qq_22186119 新安装MATLAB2016a之后,发现MATLAB没有和m文件关联 每次打开m文件后都会重新打开一次MATLAB主程序 后来发现 ...
- JAVA js WEB 疑难点总结
1.获取combox的Value 和 Text $('#id').combobox('getValue').$('#id').combobox('getText'): 2.ajax 直接访问ht ...