题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1015

题解:

  如果按照题目的意思,每次删点、删边太困难了……于是采用逆向思维,构造出最后的情况,往上加点、加边,用并查集判断连通块即可

  [ATTENTION]易犯错误:逆向的最开始连通块个数cnt为n-k个而不是n个,每次加点时cnt++,然后在并集的时候再相应地减

 #include<cstdio>
#define MAXN 400010
int n,m,k,head[MAXN],fa[MAXN],cnt,ans1,ans2[MAXN];
bool att[MAXN];
struct edge
{
int v,next;
}e[MAXN];
void add(int i,int x,int y)
{
e[i]=(edge){y,head[x]};
head[x]=i;
}
int getfa(int x)
{
return fa[x]=fa[x]==x?x:getfa(fa[x]);
}
void work(int dep)
{
if(dep==k+)
{
for(int u=;u<=n;u++)
{
if(att[u])continue;
for(int i=head[u];i;i=e[i].next)
{
int v=e[i].v;
if(att[v])continue;
int p=getfa(u),q=getfa(v);
if(p!=q)
{
fa[q]=p;
cnt--;
}
}
}
return;
}
int x;
scanf("%d",&x);
att[++x]=true;
work(dep+);
ans2[++ans1]=cnt;
cnt++;
att[x]=false;
for(int i=head[x];i;i=e[i].next)
{
int v=e[i].v;
if(att[v])continue;
int p=getfa(x),q=getfa(v);
if(p!=q)
{
fa[q]=p;
cnt--;
}
}
}
int main()
{
scanf("%d%d",&n,&m);
int x,y;
for(int i=;i<=m;i++)
{
scanf("%d%d",&x,&y);
add(i<<,++x,++y);
add((i<<)+,y,x);
}
scanf("%d",&k);
cnt=n-k;
for(int i=;i<=n;i++)fa[i]=i;
work();
printf("%d\n",cnt);
for(int i=ans1;i>=;i--)printf("%d\n",ans2[i]);
return ;
}

PS:感觉自己宛如一个滞胀……竟然在并查集那里卡了好久……

bzoj 1015 星球大战starwar的更多相关文章

  1. BZOJ 1015 星球大战starwar 逆向并查集

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1015 题目大意: 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个 ...

  2. BZOJ 1016 星球大战starwar(逆向-并查集)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1015 题意:给出一个图.每次删掉一个点,求删掉之后连通块个数. 思路:正着做不好做,我们 ...

  3. BZOJ 1015 星球大战

    Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通过 ...

  4. BZOJ [JSOI2008]星球大战starwar

    正着显然不可做,我们采取反向并查集,将删点改为加点,每次贪心的认为加了一个联通块,一旦不符就减一. #include<bits/stdc++.h> using namespace std; ...

  5. BZOJ 1015 星球大战(并查集)

    正着不好搞,考虑倒着搞.倒着搞就是一个并查集. # include <cstdio> # include <cstring> # include <cstdlib> ...

  6. 【BZOJ】【1015】 【JSOI2008】星球大战starwar

    并查集/时光倒流 删点维护连通块个数比较难处理,所以我们就逆序来做,先处理最后状态下有多少连通块,再依次加入被删的点,这样就变删点为加点,利用并查集即可维护连通块个数. /************** ...

  7. BZOJ 1015: [JSOI2008]星球大战starwar 并查集

    1015: [JSOI2008]星球大战starwar Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝 ...

  8. 【BZOJ】1015: [JSOI2008]星球大战starwar

    1015: [JSOI2008]星球大战starwar 题意:一个点数为N(1<= 40w),边数为M(1<=20w)的图,总共删除k个节点,问开始以及每次删除一个节点之后图的连通块数? ...

  9. BZOJ 1015 [JSOI2008]星球大战starwar

    1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 3551  Solved: 1581[Submit ...

随机推荐

  1. C# 类反射创建对象实例

    object obj= Activator.CreateInstance(Type  type);

  2. [CQOI2012]交换棋子 网络流

    ---题面--- 题解: 一开始很快想出了一个接近正解的建图方法,但其实是错误的,不过还是骗了70分_(:зゝ∠)_ 首先我们可以观察到棋子有限,但费用多种,其实也就相当于限制了流量,找最小费用 对于 ...

  3. spring+springMVC+mybatis较全

    1.基本概念   1.1.Spring   Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On- ...

  4. 用户登录拦截器查询到登录用户后如何将用户信息传递到后面的Controller

    taotao创建订单代码中之前忘了加入用户信息,那么加上呢? 分析:用户创建订单的时候,我们会强制要求用户先登录,也就是说,创建订单的Controller执行时,一定是用户已经登录了的,而用户只要登录 ...

  5. Codeforces Round #342 (Div. 2) B

    B. War of the Corporations time limit per test 1 second memory limit per test 256 megabytes input st ...

  6. Human life FZU - 2295 最大权闭合子图(第一次遇到被教育了)

    Xzz is playing a MMORPG "human life". In this game, there are N different skills. Some ski ...

  7. derby数据库windows自带的客户端

    本示例演示用windows自带的ij来操作derby数据库,包括建库,建表,插入数据,查询数据 首先要配置环境变量: 其次打开cmd输入如下图所示的命令: java代码如下: package com. ...

  8. MANIFEST.MF的文件的作用

    在web项目中一个war包下面有一个文件叫:MANIFEST.MF 这个文件的作用是:告诉我们的信息有: Manifest-Version: 1.0Built-By: 张三(由谁创建)Build-Jd ...

  9. 002.比较vector对象是否相等

    1.使用vector模板 //编写一段程序,比较vector对象是否相等 //注:该例类似于一个[彩票游戏] #include <iostream> #include <ctime& ...

  10. HDU1542 扫描线+离散化

    Atlantis Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...