首页 > 其他分享 >CF771A. Bear and Friendship Condition 题解 并查集

CF771A. Bear and Friendship Condition 题解 并查集

时间:2024-10-26 17:31:17浏览次数:7  
标签:sz 连通 int 题解 查集 cnt maxn CF771A

题目链接:https://codeforces.com/problemset/problem/771/A

视频讲解:https://www.bilibili.com/video/BV1tZ1FYPELp/?p=6

题目大意:判断一个无向图中的每个连通块是否都是一个完全图。

首先我们可以用并查集维护每个连通块的大小。

其次,我们可以开一个 \(cnt_i\) 表示以节点 \(i\) 为根的连通块中包含多少条边。

则对于每个连通块的根节点 \(i\),必须满足 \(\frac{ sz_i \times (sz_i - 1) }{2} = cnt_i\) 才是 YES;否则,是 NO。(这里 \(sz_i\) 表示以 \(i\) 为根的连通块的大小,即这个连通块中的节点个数)

示例程序:

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1.5e5 + 5;
int n, m, f[maxn], sz[maxn], cnt[maxn];
struct Edge {
	int u, v;
} e[maxn];

void init() {
	for (int i = 1; i <= n; i++)
		f[i] = i, sz[i] = 1;
}

int find(int x) {
	return x == f[x] ? x : f[x] = find(f[x]);
}

void funion(int x, int y) {
	int a = find(x), b = find(y);
	if (a != b) {
		f[b] = a;
		sz[a] += sz[b];
	}
}

int main() {
	scanf("%d%d", &n, &m);
	init();
	for (int i = 0; i < m; i++) {
		scanf("%d%d", &e[i].u, &e[i].v);
		funion(e[i].u, e[i].v);
	}
	for (int i = 0; i < m; i++) {
		cnt[find(e[i].u)]++;
	}
	for (int i = 1; i <= n; i++) {
		if (i == find(i)) {
			if ((long long)sz[i] * (sz[i] - 1) / 2 != cnt[i]) {
				puts("NO");
				return 0;
			}
		}
	}
	puts("YES");
	return 0;
}

标签:sz,连通,int,题解,查集,cnt,maxn,CF771A
From: https://www.cnblogs.com/quanjun/p/18504260

相关文章

  • Codeforces Round 981 (Div. 3) 10.24 (ABCDE)题解
    CodeforcesRound981(Div.3)2024.10.24题解A.SakurakoandKosuke题意:\(Sakurako\)与\(Kosuke\)正在玩游戏,一个点在原点\(x=0\)的起始位置。对于第\(i\)次操作,点会移动\(2\asti-1\)步。两人轮流操作,Sakurako先手,每次将点往负方向移动;Kosuke每次将点往正方向移动......
  • 题解:CF599B Spongebob and Joke
    完整题意详见题面。已知$b_i=f_{a_i}$,求数组$a$的值。先记录每个$f_i$的值的数量,当$f$数组中与$b$数组中没有相同的值时,输出Impossible当$f$数组中与$b$数组中有多组相同的值时,输出Ambiguity其余情况输出Possible。然后考虑如何求出数组$a$,对于$......
  • UVA11294 Wedding 题解
    洛谷题目传送门前排提示:本题需要用到知识点2-SAT以及强联通分量,模板传送门P4782【模板】2-SAT。题目大意:有至多303030对夫妻将会参加一个婚宴。他们将会坐在一个......
  • ctfshow web入门命令执行——web29-40题解
    web291.传入c参数来进行代码执行,payload: c=system("catfla*.php");  如图2.浏览器默认不显示php的标签所以需要右键查看源代码web30题目过滤了命令执行函数system,还可以用passthur(),过滤的字符可以用?代替单个字符。payload:?c=passthur("catfla?.p?p");查看源......
  • Anaconda + Vscode 和 Anaconda + Pycharm安装操作教程以及问题解决
    1.anaconda安装2.打不开AnacondaNavigation解决办法3.如何创建虚拟环境(2种方法)4.Anaconda+vscode5.Anaconda+pycharmAnaconda+Vscode和Anaconda+Pycharm安装操作教程以及问题解决1.anaconda安装Anaconda下载地址我选的是2020,11的一个版本。还没装之前电脑是有p......
  • Codeforces Round 981 (Div. 3)A-D题解
    CodeforcesRound981(Div.3)A.SakurakoandKosukeSakurakoandKosukedecidedtoplaysomegameswithadotonacoordinateline.Thedotiscurrentlylocatedinposition\(x=0\).Theywillbetakingturns,andSakurakowillbetheonetostart.Ont......
  • [Ynoi2015] 盼君勿忘 题解
    CSP前学习珂学,祝自己\(while(1)\rp++\)。考虑求解出每种数对答案的贡献。设\(t=r-l+1,k_x=\sum\limits_{i=l}^r[a_i=x]\),由容斥得贡献为\(x(2^t-2^{t-k_x})\)。求解\(k_x\),考虑莫队,时间复杂度为\(O(n\sqrtn)\),这也是本题的复杂度上限。由于\(p\)会变,所以不能用莫......
  • 题解:P11143 「SFMOI Round I」Strange Cake Game
    题目思路考虑贪心算法。根据题意,我们可以猜出结论,在最优状态下,小W将一直向下移动,小M一定向右移动。又因为小W是先手,所以当这块巧克力的横坐标小于等于纵坐标,即\(x\ley\)时,这块巧克力才可能归小W所有。另外,本题还有某些神秘做法可得\(20-25\)分。要特别注意的是......
  • 【题解】A. 错排问题
    递推T1题面(可从下方链接跳转看原题题面):求多少个n个数的排列,满足对于任意的i(1≤i≤n),有Ai≠i。题目传送门序言&结论:这是一道经典的题目,可以先记一下这个结论,设f[n]表示有n个数错排f[n]=(n-1)*(f[n-1]+f[n-2])推理过程:f[n]状态的设置是显然的(无需多言)边界......
  • 题解:Tokitsukaze, CSL and Stone Game
    ProblemLinkTokitsukaze,CSLandStoneGame题外话对于某些人说降绿甚至降黄,本人是很不同意的,毕竟多一道水蓝有什么不好题意翻译得很简洁,不再赘述。Solution不难发现有以下几种情况:只有两堆不等的,肯定选少的那堆,因为这样不易使得两堆相等。若两堆相等,一定破坏相等......