题面:
题意:
每次选择一个能选择的极大连通块,连通块内的点的权值都大于0。
每次操作使得选择的极大联通块内的所有点的点权值-1。
问使得图上所有的点的点权值全为0,需要进行多少次操作。
题解:
可以发现,并查集每个连通块上的根节点是权值最小的点。那么并查集的每个根节点就是最先减到0,使得这个连通块分裂成多个连通块的点。
f a t h e r x father_x fatherx是我在合并并查集时,x的父亲节点。如果某个点没有 f a t h e r x father_x fatherx那么就说明他是这个连通块最小的点。
代码:
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<string>
#include