题目 这16年的确实简单啊,我都能达到250分了,羡慕16年。
L2-1 红色警报 题意: 给定n个点m条边,依次删除k个点。每删除一个点,根据删除后连通块是否增加决定输出什么,如果所有点都被删除,输出"Game Over". 思路: 我想着是倒着操作,LCT我肯定不会,只能倒着连边。如果某个点连接的两个点不在一棵树上,说明删除该点时二者不连通了。但是wa了一个点,不知道为什么,上完课研究一下。 题解用的方法很暴力,但是确实没问题,而且能保证正确性。没删除一个点重新建并查集,nnn,500^3,确实是个能过的复杂度。 时间复杂度: O(nnn) 代码:
#include
using namespace std;
const int N = 502;
#define fir(i,a,b) for(int i=a;i>n>>m;
fir(i,0,n-1) fa[i] = i;
for(int i=0;i>x>>y;
a[x][y] = a[y][x] = 1;
Merge(x,y);
}
int cnt = 0;
fir(i,0,n-1) if(find(i) == i) cnt++;
cin>>k;
for(int t=0;t>x;
vis[x] = 1;
fir(i,0,n-1) fa[i] = i;
for(int i=0;ix;
int l = fun(s1);
int r = fun(s2);
add(l,r,x); add(r,l,x);
}
Dij(1);
int now = 2;
vector va;
while(now != -1)
{
va.push_back(now);
now = pre[now];
}
reverse(va.begin(),va.end());
for(int i=0;i
关注
打赏