【Henu ACM Round#24 E】Connected Components
【链接】 我是链接,点我呀:)
【题意】
在这里输入题意
【题解】
要求把连续的一段li..ri的边全都删掉。
然后求剩下的图的联通数
如果暴力的话
复杂度显然是O(k*m)级别的。
考虑我们把li..ri全都删掉。
接下来要做两件事。
第一是把1..li-1这些边连起来。
并查集1
然后是把ri+1..m这些边连起来。
并查集2
然后把并查集1和并查集2合并在一起求联通分量就好
两个并查集合在一起可以在线性复杂度内完成。
那么花费的时间就在1..li-1和ri+1,,m这两个并查集的获取上。
注意到n非常小。
我们可以处理出来前i条边的前缀并查集。
和i..m这些边的后缀并查集。
这样这两个并查集就能在O(1)下获取了。
然后合并两个并查集就好。
复杂度是O(n*m)
足以通过了。
【代码】
#include <bits/stdc++.h>
using namespace std;
const int M = 1e4;
const int N = 500;
struct BCJ{
int f[N+10],n;
void Init(int nn){
n = nn;
for (int i = 1;i <= n;i++) f[i] = i;
}
int ff(int x){
if (f[x]==x) return x;
else return f[x] = ff(f[x]);
}
void join(int x,int y){
int r1 = ff(x),r2 = ff(y);
if (r1!=r2) f[r1] = r2;
}
int Get_Union(){
int cnt = 0;
for (int i = 1;i <= n;i++)
if (ff(i)==i){
cnt++;
}
return cnt;
}
}pre[M+10],last[M+10];
pair<int,int> a[M+10];
int n,m;
int solve(BCJ a,BCJ b){
for (int i = 1;i <= n;i++) b.join(a.ff(i),i);
return b.Get_Union();
}
int main()
{
cin >> n >> m;
for (int i = 1;i <= m;i++) cin >> a[i].first >> a[i].second;
pre[0].Init(n);
for (int i = 1;i <= m;i++){
pre[i] = pre[i-1];
pre[i].join(a[i].first,a[i].second);
}
last[m+1].Init(n);
for (int i = m;i >= 1;i--){
last[i] = last[i+1];
last[i].join(a[i].first,a[i].second);
}
int k;
cin >> k;
for (int i = 1;i <= k;i++){
int x,y;
cin >> x >> y;
cout<<solve(pre[x-1],last[y+1])<<endl;
}
return 0;
}
【Henu ACM Round#24 E】Connected Components的更多相关文章
- 【Henu ACM Round#24 D】Iterated Linear Function
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 把B提取出来就是一个等比数列了. 求和一下会发现是这种形式. \(B*\frac{(A^n-1)}{A-1}+A^n*x\) 则求一 ...
- 【Henu ACM Round#24 C】Quiz
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 肯定是这样 先放k-1个,然后空1个,然后再放k-1个.然后再空1个.. 以此类推. 然后如果(n/k)*(k-1)+n%k> ...
- 【Henu ACM Round#24 B】Gargari and Bishops
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 如果写过n皇后问题. 肯定都知道 某个点(i,j)和它在同一条对角线上的点分别是i+j的值和i-j的值相同的点. 然后会发现选择的两 ...
- 【Henu ACM Round#24 A】k-String
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 如果是一个k-string的话. 考虑最后的串假设形式为sss..ss(k个s) 则s中出现的字母,整个串中最后出现的次数肯定为k的 ...
- 【Henu ACM Round#15 F】Arthur and Questions
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] a1+a2+...+ak<a2+a3+...ak+1 ->a1<ak+1 a2+a3+...+ak+1<a3 ...
- 【Henu ACM Round#16 F】Om Nom and Necklace
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] KMP算法可以把"i前缀"pre[i] 分成ssssst的形式 这里t是s的前缀. 然后s其实就是pre[i]中 ...
- 【Henu ACM Round#16 E】Paths and Trees
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 感觉很像一道最短路. 然后就试了一发. 结果真的是.. 只要用一个优先队列优化的dijkstra算法求出每个点的最短路上的前一个点是 ...
- 【Henu ACM Round#18 F】Arthur and Walls
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 考虑,为什么一个连通块里面的空格没有变成一个矩形? 如果不是形成矩形的话. 肯定是因为某个2x2的单张方形里面. 只有一个角是墙.其 ...
- 【Henu ACM Round#17 F】Upgrading Array
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 如果我们对某一个位置i操作两次的话. 显然结果就和操作一次一样. 因为第一次操作过后1..i这些数字就变成是互质的了. gcd为1. ...
随机推荐
- Lapack下载安装
安装 1.下载压缩文件 wget http://www.netlib.org/lapack/lapack-3.8.0.tar.gz 2.解压缩 tar -zxvf lapack-3.8.0.tar.g ...
- vue无缝滚动的插件开发填坑分享
写插件的初衷 1.项目经常需要无缝滚动效果,当时写jq的时候用用msClass这个老插件,相对不上很好用. 2.后来转向vue在vue-awesome没有找到好的无缝滚动插件,除了配置swiper可以 ...
- openvswith Frequently Asked Questions
Open vSwitch <http://openvswitch.org> 参考地址:http://git.openvswitch.org/cgi-bin/gitweb.cgi?p=ope ...
- Nginx监控
http://www.ttlsa.com/nginx/nginx-status-detail/ http://blog.csdn.net/bobpen/article/details/53431699 ...
- hdu4927 Series 1(组合+公式 Java大数高精度运算)
题目链接: Series 1 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) ...
- bzoj3626【LNOI2014】LCA
3626: [LNOI2014]LCA Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1266 Solved: 448 [Submit][Stat ...
- _00017 Kafka的体系结构介绍以及Kafka入门案例(0基础案例+Java API的使用)
博文作者:妳那伊抹微笑 itdog8 地址链接 : http://www.itdog8.com(个人链接) 博客地址:http://blog.csdn.net/u012185296 博文标题:_000 ...
- 【LDA】动手实现LDA
这段时间对LDA比較感兴趣,尝试在工作中使用它.平时做想法的高速验证,都用的是"GibbsLDA++-0.2",一个c实现版本号的LDA. 这两天用c++ stl自己写了一个单机版 ...
- UVA - 10689 Yet another Number Sequence 矩阵快速幂
Yet another Number Sequence Let’s define another number sequence, given by the foll ...
- iOS-UITextField 全面解析
iOS中UITextField 使用全面解析 建议收藏,用到的时候来这里一查就都明白了 //初始化textfield并设置位置及大小 UITextField *text = [[UITextField ...