大意:题意概括以下就是两种操作(1)删除某个点(2)查询两个点是否连通
思路:我们直接去模拟的话,显然时间复杂度不太行,因为如果我们每次都去暴力查询某两个点是否连通的话复杂度太高了。因为是无向图,我们可以考虑用并查集快速判断两点是否连通,但是并查集并不支持“删点操作”,所以我们可以离线操作,先把所有要删的点都删除(即在用并查集连图的时候不连这些点),然后倒叙操作,每次“加点”就行了。
代码如下:
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<int,int> PII;
const int N=50010;
typedef pair<int,int> PII;
typedef pair<LL,int> PLI;
int gcd(int a,int b)
{
return b ? gcd(b,a%b) : a;
}
int n,m,k;
vector<int> G[N];
int fa[N];
bool st[N];
int c[1010