博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[JSOI2008]星球大战
阅读量:4983 次
发布时间:2019-06-12

本文共 1937 字,大约阅读时间需要 6 分钟。

正向进行很显然很BT, 所以逆向离线此题是个不错的选择. 使用并查集统计劫难之后的联通状态, 然后逐个添加结点即可.

1 #include 
2 #include
3 #include
4 #include
5 using std::vector; 6 #define VERTEXMAX 400003 7 int set[VERTEXMAX], Des[VERTEXMAX], output[VERTEXMAX]; 8 bool Vertex[VERTEXMAX]; 9 vector
To[VERTEXMAX];10 void Initialize()11 {12 memset(Vertex, true, sizeof(Vertex));13 for (int i = 0; i < VERTEXMAX; ++i)14 set[i] = i;15 }16 int Father(int x)17 {18 if (set[x] == x)19 return x;20 return set[x] = Father(set[x]);21 }22 void Union(int x, int y, int &sum)23 {24 int a_Father = Father(x);25 int b_Father = Father(y);26 if (a_Father != b_Father)27 {28 set[a_Father] = b_Father;29 --sum;30 }31 }32 int main()33 {34 Initialize();35 int V, E, Dn, Block, p = 0;36 scanf("%d %d", &V, &E);37 for (int i = 0, x, y; i < E; To[x].push_back(y), To[y].push_back(x), ++i)38 scanf("%d %d", &x, &y);39 scanf("%d", &Dn);40 p = Dn;41 for (int i = 0; i < Dn; Vertex[Des[i]] = false, ++i)42 scanf("%d", &Des[i]);43 Block = V - Dn;44 for (int i = 0, j; i < V; ++i)45 if (Vertex[i])46 for (j = 0; j < To[i].size(); ++j)47 if (Vertex[To[i][j]])48 Union(i, To[i][j], Block);49 output[p--] = Block;50 for (int i = Dn - 1, j, current_star; i > -1; --i)51 {52 current_star = Des[i];53 Vertex[current_star] = true;54 ++Block;55 for (j = 0; j < To[current_star].size(); ++j)56 if (Vertex[To[current_star][j]])57 Union(current_star, To[current_star][j], Block);58 output[p--] = Block;59 }60 for (int i = 0; i <= Dn; ++i)61 printf("%d\n", output[i]);62 return 0;63 }

 

转载于:https://www.cnblogs.com/hatsuakiratenan/p/3307433.html

你可能感兴趣的文章
Python的学习之旅———基本数据类型 (元组)
查看>>
nmap参数思维导图
查看>>
面试小题
查看>>
Atitit.go语言golang语言的新的特性 attilax总结
查看>>
PMD Tutorial
查看>>
iOS中UIKit——UIDataDetectors(数据检测器)它将电话、邮件、网址等变为链接
查看>>
博客随笔《文章目录——php》大纲
查看>>
【转】游戏引擎剖析(Game Engine Anatomy 101)
查看>>
网页色彩和图片设计
查看>>
DotNetty网络通信框架学习
查看>>
LeetCode 496. Next Greater Element I
查看>>
SpringBoot自定义拦截器实现
查看>>
Docker commit 制作weblogic镜像
查看>>
阮老师谈词条排序
查看>>
TOP 10开源的推荐系统简介
查看>>
《unity插件》playmaker新手使用指南
查看>>
Android Studio 打包自定义apk文件名
查看>>
9款极具创意的HTML5/CSS3进度条动画(免积分下载)
查看>>
4. Qt的容器类
查看>>
[leetcode]Search for a Range
查看>>