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]星球大战_并查集 题意:很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的 机遇,一支反抗军摧毁了帝国的超级武器, ...
随机推荐
- SAS进阶《深入解析SAS》之Base SAS基础、读取外部数据到SAS数据集
SAS进阶<深入解析SAS>之Base SAS基础.读取外部数据到SAS数据集 前言:在学习完<SAS编程与商业案例>后,虽然能够接手公司的基本工作,但是为了更深入的SAS学习 ...
- 整合springboot,angular2,可以前后台交互数据
改造了一下angular2官方文档中的hero项目,让其可以进行后台的交互, https://github.com/DACHUYIN 源码在上面...博客就不写了....
- JS——正则案例
验证座机号码 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UT ...
- HDU_Reward_拓扑排序
Reward Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- Python 之lxml解析库
一.XPath常用规则 二.解析html文件 from lxml import etree # 读取HTML文件进行解析 def parse_html_file(): html = etree.par ...
- MFC cstring 型转化成 double型
cstring szNum; GetDlgItemText(IDC_EDIT1, szNum); double Num; Num = _ttol(szNum); 转化成长整型 Num = _tstof ...
- BZOJ 2626: JZPFAR KDtree + 堆
Code: #include<bits/stdc++.h> #define maxn 200000 #define inf 1000000000000000 #define mid ((l ...
- IDEA生成增强for循环
itar 生成array for代码块 for (int i = 0; i < array.length; i++) { = array[i]; } itco 生成Collection迭代 fo ...
- TensorFlow 学习笔记(1)----线性回归(linear regression)的TensorFlow实现
此系列将会每日持续更新,欢迎关注 线性回归(linear regression)的TensorFlow实现 #这里是基于python 3.7版本的TensorFlow TensorFlow是一个机器学 ...
- PAT 1111 Online Map
Input our current position and a destination, an online map can recommend several paths. Now your jo ...