正着显然不可做,我们采取反向并查集,将删点改为加点,每次贪心的认为加了一个联通块,一旦不符就减一. #include<bits/stdc++.h> using namespace std; ; bool del[N],v[N]; int f[N],p[N],head[N],cnt,tot,ans[N],n,m,k; int get(int x){return x==f[x]?x:f[x]=get(f[x]);} struct node{ int to,nex; }e[N]; void addd…