luogu1197 [JSOI2008]星球大战
题目大意
有一个无向图,每次删除一个节点,求删除后图中连通块的个数。(如果两个星球可以通过现存的以太通道直接或间接地连通,则这两个星球在同一个连通块中)
题解
连通块?用并查集可以找到一个连通块,但是并查集不支持删除呀!所以我们将删点改为造点并连边就可以用并查集解决这个问题了。
#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]星球大战的更多相关文章
- 1015: [JSOI2008]星球大战starwar
1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec Memory Limit: 162 MB Description 很久以前,在一个遥远的星系,一个黑暗的帝国 ...
- BZOJ1015[JSOI2008]星球大战starwar[并查集]
1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 5253 Solved: 2395[Submit ...
- [1015][JSOI2008]星球大战starwar(并查集)
1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 2124 Solved: 909[Submit] ...
- BZOJ 1015: [JSOI2008]星球大战starwar 并查集
1015: [JSOI2008]星球大战starwar Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝 ...
- bzoj1015:1015: [JSOI2008]星球大战starwar
应该是全部读入之后再添加边用并查集就可以了. yyl用空间换时间.u[]v[]等将边预存起来. #include<cstdio> #include<cstring> #incl ...
- 【BZOJ】1015: [JSOI2008]星球大战starwar
1015: [JSOI2008]星球大战starwar 题意:一个点数为N(1<= 40w),边数为M(1<=20w)的图,总共删除k个节点,问开始以及每次删除一个节点之后图的连通块数? ...
- BZOJ1015 [JSOI2008]星球大战starwar(并查集)
1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 3895 Solved: 1750[Submit ...
- BZOJ 1015 [JSOI2008]星球大战starwar
1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 3551 Solved: 1581[Submit ...
- BZOJ_1015_[JSOI2008]星球大战_并查集
BZOJ_1015_[JSOI2008]星球大战_并查集 题意:很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的 机遇,一支反抗军摧毁了帝国的超级武器, ...
随机推荐
- Json解析与Gson解析
本文主要介绍json最原始的解析与google提供的gson工具类解析 ①json解析 /** * 普通的json解析 * @param s * @throws JSONException */ pr ...
- web流行工具
中小型公司: Node.js:现代工业化前端的基础: RequireJS:AMD规范, 即将过时的 JavaScript 模块化方案: Bower:前端模块源: npm:前端工具源,另一个潜在的前端模 ...
- 海盗(Haidao)网店系统最新官方版
产品介绍:经过开发团队半个月的努力,Haidao v1.1 beta版终于和大家见面了,在这个版本中我们重点系统目录结构和整体框架进行了改进,同时新增加了多个功能模块. 四大功能模块意在打造最灵活的电 ...
- 【译】x86程序员手册12-4.2系统指令
4.2 Systems Instructions 系统指令 Systems instructions deal with such functions as: 系统指令具有以下功能: Verifica ...
- dubbo之本地伪装
本地伪装 本地伪装 1 通常用于服务降级,比如某验权服务,当服务提供方全部挂掉后,客户端不抛出异常,而是通过 Mock 数据返回授权失败. 在 spring 配置文件中按以下方式配置: <dub ...
- POJ 3070 - 快速矩阵幂求斐波纳契数列
这题并不复杂. 设$A=\begin{pmatrix} 1 & 1 \\ 1 & 0 \end{pmatrix}$ 由题中公式: $\begin{pmatrix}f(n+1) & ...
- linux最常用的快捷键
1.ctrl+alt+T 调出命令行界面 2.alt+f4 关闭当前窗口
- CDR软件-CorelDRAW软件下载,618活动
618我有诚意,你呢? 不花钱的618,是残缺的618 给自己一个放肆shopping的机遇 活动力度不够大? 继续升级,终极体验 618疯狂倒计时! 同志们,如果你错过了之前的抢先购和升级活动 那么 ...
- 用C#在Visual Studio写Javascript单元测试
1.在vs创建一个标准的单元测试工程 2.引用nuget包:Edge.js 我是用的是6.11.2版本 3.编写JsRunner类 using EdgeJs; using System; using ...
- mybatis 简单的入门实例
第一步:添加mybaties的架包 第二步:配置mybaties的文件 <?xml version="1.0" encoding="UTF-8" ?> ...