JZOJ 3453【NOIP2013中秋节模拟】连通块
原题
Description
你应该知道无向图的连通块的数量,你应该知道如何求连通块的数量。当你兴奋与你的成就时,破坏王Alice拆掉了图中的边。当她发现,每删去一条边,你都会记下边的编号,同时告诉她当前连通块的个数。
然而,对边编号简直就是个悲剧,因为Alice为了刁难你,拆掉编号从l到r的边,当然你需要做的事情就是求连通块的个数。如果你答对了,Alice会把拆掉的边装好,迚行下一次破坏。如果你无法完成这个任务,Alice会彻底毁了你的图。
进行完足够多次之后,Alice觉得无聊,就玩去了,而你却需要继续做第三题。
Input
第一行两个整数n,m,表示点数和边数。
之后m行每行两个整数x,y,表示x与y之间有无向边。(按读入顺序给边编号,编号从1开始)
一行一个整数k,表示Alice的破坏次数。
之后k行,每行两个整数l,r。
Output
k行,每行一个整数。
Sample Input
6 5
1 2
5 4
2 3
3 1
3 6
6
1 3
2 5
1 5
5 5
2 4
3 3
Sample Output
4
5
6
3
4
2
Data Constraint
对于30%的数据,n<=100,k<=10n
对于60%的数据,k<=1000k
对于100%的数据,n<=500,m<=10000,k<=20000,1<=l<=r<=mn
题解
并查集。Collect!
每一个 f[i]f[i] 为一个并查集,记录只添加前 ii 条边时,所有节点的联通情况。
每一个 g[i]g[i] 也是一个并查集,记录只添加 i—mi—m 条边时,所有节点的联通情况。
对于每个询问只要把 f[l−1]f[l-1] 和 g[r+1]g[r+1] 合并至 H[]H[ ] 中。
最后在 H[]H[] 中判断即可。
Code
#include<cstdio>
#include<cstring>
using namespace std;
int n,m;
struct data
{int x,y;
}a[10002];
int f[10002][501],g[10002][501],h[501];
inline int read()
{int data=0; char ch=0;while(ch<'0' || ch>'9') ch=getchar();while(ch>='0' && ch<='9') data=data*10+ch-'0',ch=getchar();return data;
}//读入优化
inline int getf(int k,int x)
{if(f[k][x]==x) return x;return f[k][x]=getf(k,f[k][x]);
}//F的查找
inline int getg(int k,int x)
{if(g[k][x]==x) return x;return g[k][x]=getg(k,g[k][x]);
}//G的查找
void init()
{n=read();m=read();for(int i=1;i<=m;i++) a[i].x=read(),a[i].y=read();for(int i=1;i<=n;i++) f[0][i]=g[m+1][i]=i;//初值for(int i=1;i<=m;i++){memcpy(f[i],f[i-1],sizeof(f[i]));f[i][getf(i,a[i].x)]=getf(i,a[i].y);}//F的处理for(int i=m;i;i--){memcpy(g[i],g[i+1],sizeof(g[i]));g[i][getg(i,a[i].x)]=getg(i,a[i].y);}//G的处理
}
inline int geth(int x)
{if(h[x]==x) return x;return h[x]=geth(h[x]);
}//H的查找
void work()
{int k=read();while(k--){int l=read()-1,r=read()+1;memcpy(h,f[l],sizeof(h));for(int i=1;i<=n;i++) h[geth(h[i])]=geth(g[r][i]);//H的处理int ans=0;for(int i=1;i<=n;i++)if(h[i]==i) ans++;//H的判断printf("%d\n",ans);}
}
int main()
{freopen("connect.in","r",stdin);freopen("connect.out","w",stdout);init();work();return 0;
}
JZOJ 3453【NOIP2013中秋节模拟】连通块相关推荐
- HDU - 1547 Bubble Shooter(dfs+连通块+模拟)
题目链接:点击查看 题目大意:模拟泡泡枪游戏,问当击破指定位置的泡泡时,能有多少个泡泡同时爆炸? 题目分析:一个中规中矩的连通块问题,只不过在向四周扩散的时候需要注意的是,奇数行和偶数行的方向有点不一 ...
- 【2018.5.12】模拟赛之三-ssl2415 连通块【并查集】
正题 题目大意 在一个n*n的棋盘上进行m此操作.在一个格子上放一个黑或白的棋子.多个相连的同色棋子形成一个连通块,求每次操作后求连通块数. 解题思路 并查集表示连通,然后每次扩展,如果有同色的就连通 ...
- 1021 Deepest Root (25 分) 【难度: 中 / 知识点: 树的直径 连通块】
https://pintia.cn/problem-sets/994805342720868352/problems/994805482919673856 方法一: 数组模拟邻接表 第一步: 爆搜df ...
- [C] [编程题]连通块(DFS解决)
时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 256M,其他语言512M 来源:牛客网 金山办公2020校招服务端开发工程师笔试题(一) 题目描述 给一个01矩阵,1代表是陆地,0代表 ...
- [C] 深度优先搜索解决连通块/染色问题——求岛的个数
本文介绍用DFS解决连通块个数问题 有关dfs的介绍见另外一篇:不撞南墙不回头--深度优先搜索 例题 宝岛探险 题目描述 一个小岛由一个主岛和一些复附属岛屿组成,该岛使用一个二维矩阵表示,其中数字表示 ...
- C. Edgy Trees Codeforces Round #548 (Div. 2) 【连通块】
一.题面 here 二.分析 这题刚开始没读懂题意,后来明白了,原来就是一个数连通块里点数的问题.首先在建图的时候,只考虑红色路径上的点.为什么呢,因为为了不走红色的快,那么我们可以反着想只走红色的路 ...
- 树形dp ---- gym101655 D - Delta Quadrant 树上连通块思维换根 + 树形dp
题目链接 题目大意: 给你一颗NNN个节点的树,树上每条边有边权就是遍历的时间,你可以从任意节点出发遍历N−kN-kN−k个点并且回到出发点,问你最短的时间是多少? k∈[0,min(N,20)],N ...
- UVa572 Oil Deposits DFS求连通块
技巧:遍历8个方向 for(int dr = -1; dr <= 1; dr++)for(int dc = -1; dc <= 1; dc++)if(dr != 0 || dc != 0) ...
- oracle asm dd命令,ASM来用DD命令模拟数据块损坏
ASM来用DD命令模拟坏块 会话1:oracle SQL> create tablespace test datafile '+DATA/ora11g23/datafile/test.dbf' ...
最新文章
- linux系统运维费用,一般Linux运维学习的费用是多少?Linux学习
- JAVA基础中容易踩坑的知识点
- OpenGL水波纹效果
- Numpy学习-数组的索引
- 关于Python异常处理,你需要了解的知识点
- 全球 IPv4 地址耗尽,IPv6 来了!
- Ti的DM368系列芯片的所有PDF资料汇总
- 童家旺:如何用分表存储来提高性能
- Easyui validatebox修改——1.当text发生变化时在校验,2.取消校验,3扩展自定义验证
- 我的测试生活感悟2 - Art Of Unit Testing
- 微信小程序本地存储存储_如何利用本地存储构建快速的应用程序
- VB.NET工作笔记008---vs2017创建使用WCF服务_并调用服务demo
- C# 笔记1 - 操作目录
- word中脚注和尾注的处理
- Beautiful Soup的安装
- Unity - RectTransform详解
- 开始做一个简单的记账工具
- CPA二十一--划出和追加保证金(转载)
- python回调廖雪蜂_Python 廖雪峰教程《三》
- Python 字典:当索引不好用时
热门文章
- 手把手实现YOLOv3(一)
- Python进阶_wxpy学习:用微信监控你的程序
- Win10:tensorflow学习笔记(4)
- IP地址,子网掩码、默认网关,DNS服务器是什么意思
- STL vector的几种清空容器(删除)办法
- java汽车租赁系统_汽车租赁公司全网低价
- 科大星云诗社动态20220115
- ModuleNotFoundError: No module named 'mpl_toolkits.basemap'
- java map 查找_Map 查找表操作
- 移动语义-右值引用-完美转发-万字长文让你一探究竟