题目大意

  有一个无向图,每次删除一个节点,求删除后图中连通块的个数。(如果两个星球可以通过现存的以太通道直接或间接地连通,则这两个星球在同一个连通块中)

题解

  连通块?用并查集可以找到一个连通块,但是并查集不支持删除呀!所以我们将删点改为造点并连边就可以用并查集解决这个问题了。

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; const int MAX_EDGE = 200010, MAX_NODE = MAX_EDGE * 2;
int TotNode, TotEdge; struct Node;
struct Edge; struct Edge
{
Node *To;
Edge *Next;
}_edges[MAX_EDGE * 2];
int _eCount; struct Node
{
Node *Father;
Edge *Head;
int AddRank;
bool Built;
}_nodes[MAX_NODE], *AddOrder[MAX_NODE];
int Ans[MAX_NODE]; void AddEdge(Node *from, Node *to)
{
Edge *e = _edges + _eCount++;
e->To = to;
e->Next = from->Head;
from->Head = e;
} void Build(int uId, int vId)
{
AddEdge(_nodes + uId, _nodes + vId);
AddEdge(_nodes + vId, _nodes + uId);
} Node *FindRoot(Node *cur)
{
return cur->Father == cur ? cur : cur->Father = FindRoot(cur->Father);
} void Init(int n)
{
for (int i = 0; i < n; i++)
_nodes[i].Father = _nodes + i;
} bool Join(Node *a, Node *b)
{
Node *root1 = FindRoot(a), *root2 = FindRoot(b);
if (root1 == root2)
return false;
else
{
root1->Father = root2;
return true;
}
} bool Cmp(Node *a, Node *b)
{
return a->AddRank < b->AddRank;
} int main()
{
scanf("%d%d", &TotNode, &TotEdge);
for (int i = 0; i < TotEdge; i++)
{
int u, v;
scanf("%d%d", &u, &v);
Build(u, v);
}
int attackCnt;
scanf("%d", &attackCnt);
for (int i = 0; i < attackCnt; i++)
{
int v;
scanf("%d", &v);
_nodes[v].AddRank = attackCnt - i;
}
for (int i = 0; i < TotNode; i++)
AddOrder[i] = _nodes + i;
sort(AddOrder, AddOrder + TotNode, Cmp);
int setCnt = 0;
Init(TotNode);
for (int i = 0; i < TotNode; i++)
{
AddOrder[i]->Built = true;
setCnt++;
for (Edge *e = AddOrder[i]->Head; e; e = e->Next)
if (e->To->Built)
setCnt -= Join(AddOrder[i], e->To);
Ans[i]=setCnt;
}
for (int i = TotNode - 1; i >= TotNode - attackCnt - 1; i--)
printf("%d\n", Ans[i]);
return 0;
}

  

luogu1197 [JSOI2008]星球大战的更多相关文章

  1. 1015: [JSOI2008]星球大战starwar

    1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec Memory Limit: 162 MB Description 很久以前,在一个遥远的星系,一个黑暗的帝国 ...

  2. BZOJ1015[JSOI2008]星球大战starwar[并查集]

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

  3. [1015][JSOI2008]星球大战starwar(并查集)

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

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

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

  5. bzoj1015:1015: [JSOI2008]星球大战starwar

    应该是全部读入之后再添加边用并查集就可以了. yyl用空间换时间.u[]v[]等将边预存起来. #include<cstdio> #include<cstring> #incl ...

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

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

  7. BZOJ1015 [JSOI2008]星球大战starwar(并查集)

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

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

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

  9. BZOJ_1015_[JSOI2008]星球大战_并查集

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

随机推荐

  1. Json解析与Gson解析

    本文主要介绍json最原始的解析与google提供的gson工具类解析 ①json解析 /** * 普通的json解析 * @param s * @throws JSONException */ pr ...

  2. web流行工具

    中小型公司: Node.js:现代工业化前端的基础: RequireJS:AMD规范, 即将过时的 JavaScript 模块化方案: Bower:前端模块源: npm:前端工具源,另一个潜在的前端模 ...

  3. 海盗(Haidao)网店系统最新官方版

    产品介绍:经过开发团队半个月的努力,Haidao v1.1 beta版终于和大家见面了,在这个版本中我们重点系统目录结构和整体框架进行了改进,同时新增加了多个功能模块. 四大功能模块意在打造最灵活的电 ...

  4. 【译】x86程序员手册12-4.2系统指令

    4.2 Systems Instructions 系统指令 Systems instructions deal with such functions as: 系统指令具有以下功能: Verifica ...

  5. dubbo之本地伪装

    本地伪装 本地伪装 1 通常用于服务降级,比如某验权服务,当服务提供方全部挂掉后,客户端不抛出异常,而是通过 Mock 数据返回授权失败. 在 spring 配置文件中按以下方式配置: <dub ...

  6. POJ 3070 - 快速矩阵幂求斐波纳契数列

    这题并不复杂. 设$A=\begin{pmatrix} 1 & 1 \\ 1 & 0 \end{pmatrix}$ 由题中公式: $\begin{pmatrix}f(n+1) & ...

  7. linux最常用的快捷键

    1.ctrl+alt+T 调出命令行界面 2.alt+f4 关闭当前窗口

  8. CDR软件-CorelDRAW软件下载,618活动

    618我有诚意,你呢? 不花钱的618,是残缺的618 给自己一个放肆shopping的机遇 活动力度不够大? 继续升级,终极体验 618疯狂倒计时! 同志们,如果你错过了之前的抢先购和升级活动 那么 ...

  9. 用C#在Visual Studio写Javascript单元测试

    1.在vs创建一个标准的单元测试工程 2.引用nuget包:Edge.js 我是用的是6.11.2版本 3.编写JsRunner类 using EdgeJs; using System; using ...

  10. mybatis 简单的入门实例

    第一步:添加mybaties的架包 第二步:配置mybaties的文件 <?xml version="1.0" encoding="UTF-8" ?> ...