CF1559D1. Mocha and Diana (Easy Version)
原题链接:1559D1. Mocha and Diana (Easy Version)
题意:
小明和小红各有一个具有\(n\)个结点的森林,现执行操作:
- 加一条边,使得两人的森林还是森林
- 小明加一条\((u, v)\)的边,那么小红也必须加一条\((u, v)\)的边。
问我们最多能加多少边?
思路:
很明显,第一个条件没啥用,关键是第二个条件,我们知道如果一个人不能加\((u, v)\)一条边的前提条件是\(u\)与\(v\)已经联通,那么根据这个条件,我们可以使用并查集,而边的数据范围是\([1-1000]\),所以可以直接暴力枚举点,然后使用并查集来判断两个点是否已经在一个集合内,如果在一个集合内那么就不能加边了,否则加上即可。
#include <bits/stdc++.h>
using namespace std;
const int N = 1010;
int fa1[N], fa2[N];
int find1(int x) {
if (x != fa1[x]) fa1[x] = find1(fa1[x]);
return fa1[x];
}
int find2(int x) {
if (x != fa2[x]) fa2[x] = find2(fa2[x]);
return fa2[x];
}
int main() {
ios::sync_with_stdio(false), cin.tie(0);
int n, m1, m2;
cin >> n >> m1 >> m2;
for (int i = 1; i <= n; i++) fa1[i] = i, fa2[i] = i;
while (m1--) {
int a, b;
cin >> a >> b;
fa1[find1(a)] = find1(b);
}
while (m2--) {
int a, b;
cin >> a >> b;
fa2[find2(a)] = find2(b);
}
vector<pair<int, int>> add;
for (int i = 1; i <= n; i++) {
for (int j = i + 1; j <= n; j++) {
int u1 = find1(i), v1 = find1(j);
int u2 = find2(i), v2 = find2(j);
if (u1 != v1 && u2 != v2) {
add.push_back({i, j});
fa1[u1] = v1;
fa2[u2] = v2;
}
}
}
cout << add.size() << endl;
for (int i = 0; i < add.size(); i++)
cout << add[i].first << " " << add[i].second << endl;
return 0;
}
注意:
题目思路并不难,但是我耗了一个多小时,原因:
我一开始\(find\)函数写成了这样。
int find1(int x) {
if (x == fa1[x]) return x;
return find1(fa1[x]);
}
乍一看没错,确实没错,就是\(T\)到飞起,为啥,因为没有加入路径压缩的优化,所以\(T\)到飞起,我服了,这次长记性了。
另外,以后并查集用一个类吧,贴个板子:
struct DSU{
int fa[N], Size[N];
void init() {
for (int i = 1; i <= n; i++) fa[i] = i;
}
int find(int x) {
if (x != fa[x]) fa[x] = find(fa[x]);
return fa[x];
}
void merge(int x, int y) {
Size[find(y)] += Size[find(x)];
fa[find(x)] = find(y);
}
bool check(int x, int y) {
return find(x) == find(y);
}
}dsu1, dsu2;
CF1559D1. Mocha and Diana (Easy Version)的更多相关文章
- CF1559D2 Mocha and Diana (Hard Version)
考虑到加树边每次最多只导致一对联通块之间的状态. 所以我们以任意顺序加入当前的合法边. 我们考虑先加入所有可加的\((1,a)\) 然后统计只在\(A\)中与1连的点,\(B\)中与2连的点. 则他们 ...
- Ping-Pong (Easy Version)(DFS)
B. Ping-Pong (Easy Version) time limit per test 2 seconds memory limit per test 256 megabytes input ...
- ZOJ 3868 - Earthstone: Easy Version
3868 - Earthstone: Easy Version Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%lld ...
- Codeforces 1077F1 Pictures with Kittens (easy version)(DP)
题目链接:Pictures with Kittens (easy version) 题意:给定n长度的数字序列ai,求从中选出x个满足任意k长度区间都至少有一个被选到的最大和. 题解:$dp[i][j ...
- UVA12569-Planning mobile robot on Tree (EASY Version)(BFS+状态压缩)
Problem UVA12569-Planning mobile robot on Tree (EASY Version) Accept:138 Submit:686 Time Limit: 300 ...
- Coffee and Coursework (Easy version)
Coffee and Coursework (Easy version) time limit per test 1 second memory limit per test 256 megabyte ...
- 2016级算法第六次上机-B.ModricWang's FFT : EASY VERSION
1114 ModricWang's FFT EASY VERSION 思路 利用FFT做大整数乘法,实际上是把大整数变成多项式,然后做多项式乘法. 例如,对于\(1234\),改写成\(f(x)=1* ...
- Saving James Bond - Easy Version (MOOC)
06-图2 Saving James Bond - Easy Version (25 分) This time let us consider the situation in the movie & ...
- Codeforces Round #540 (Div. 3) F1. Tree Cutting (Easy Version) 【DFS】
任意门:http://codeforces.com/contest/1118/problem/F1 F1. Tree Cutting (Easy Version) time limit per tes ...
- Codeforces Round #540 (Div. 3) D1. Coffee and Coursework (Easy version) 【贪心】
任意门:http://codeforces.com/contest/1118/problem/D1 D1. Coffee and Coursework (Easy version) time limi ...
随机推荐
- 形象谈JVM-第一章-认识JVM
对jvm的历史不做过多介绍,感兴趣的同学可以去自行搜索. 我们直接以HotSpot VM(Virtual Machine)举例. why 为什么要有虚拟机? 举一个形象的例子:手机现在几乎是人手一台 ...
- 老问题了:idea中使用maven archetype新建项目时卡住
背景 作为一个后端Java打工人,idea就是最重要的打饭工具.创建项目,熟悉吧,但是,这么多年下来,因为idea换了版本,电脑换了等等,我还是时不时遇到根据maven archetype新建mave ...
- 一张图读懂TuGraph Analytics开源技术架构
TuGraph Analytics(内部项目名GeaFlow)是蚂蚁集团开源的分布式实时图计算引擎,即流式图计算.通过SQL+GQL融合分析语言对表模型和图模型进行统一处理,实现了流.批.图一体化计算 ...
- 小白整理了VUEX
在小白开发的项目中前端使用的是Vue,虽然在日常工作中可以使用Vue进行开发工作.但是没有系统的学习过Vue,对Vue的一些特性和方法使用时常常需要查询资料解决问题,查询资料常常会占用大量时间,尤其对 ...
- api接口对接如何实现,php如何对接api
API接口对接是现代软件开发中不可或缺的一部分,它允许不同的应用程序之间进行数据交换和服务调用.在PHP中,可以使用多种方式实现API接口的对接,包括基于HTTP协议的传统方法以及现代的API客户端库 ...
- 4.go语言复合类型简述
目录 1. 本章前瞻 2.来自leetcode的例题 描述 分析 题解 3. 复合类型新版本的变化 3.1 string和[]byte的高效转化 3.2 内置函数clear 4. 复合类型概述 4.1 ...
- C# Wke例子 -- WebUI登录窗口
概述 Wke介绍: http://blog.csdn.net/sabrecode/article/details/78145938 用Wke做了一个登录窗口, webui比较特殊. 因为它就是一个超文 ...
- 特斯拉Dojo超算:AI训练平台的自动驾驶与通用人工智能之关键
特斯拉公开Dojo超算架构细节,AI训练算力平台成为其自动驾驶与通用人工智能布局的关键一环 在近日举行的Hot Chips 34会议上,特斯拉披露了其自主研发的AI超算Dojo的详细信息.Dojo是一 ...
- Java 21的StringBuilder和StringBuffer新增了一个repeat方法
发现Java 21的StringBuilder和StringBuffer中多了repeat方法: /** * @throws IllegalArgumentException {@inheritDoc ...
- heygen模型接口 简单使用 java版
HeyGen - AI Spokesperson Video Creator 官网地址 Create a video (heygen.com) api地址 简介: 公司最近对ai方面业务比较感兴趣了 ...