hdu 4496 并查集 逆向 并查集删边
2024-08-29 18:50:01
貌似某大犇说过 正难则反,,,
题目说要对这张图进行删边,然后判断联通块的个数,那么就可以先把所有边都删掉,之后从后往前加边,若加的边两端点不在同一个联通块中,
那么此时联通快个数少一,否则不变
#include <cstdio>
#include <cstring>
#include <algorithm> const int maxn = + ;
const int maxm = + ;
int father[maxn];
int x1[maxm], x2[maxm];
int ans[maxm];
int n, m; int getfather(int x) {
if (father[x] == x) return (x);
return (father[x] = getfather(father[x]));
} int main () {
while(scanf("%d %d", &n, &m) != EOF) {
memset(ans, , sizeof(ans));
for (int i = ; i <= n; i++) father[i] = i;
for (int i = ; i <= m; i++) {
scanf("%d %d", &x1[i], &x2[i]);
x1[i] += ;
x2[i] += ;
}
ans[m] = n;
for (int i = m; i >= ; i--) {
int tx = getfather(x1[i]);
int ty = getfather(x2[i]);
if (tx != ty) {
ans[i-] = ans[i] - ;
father[tx] = ty;
} else {
ans[i-] = ans[i];
}
}
for (int i = ; i <= m; i++) printf("%d\n", ans[i]);
}
return ;
}
最新文章
- ExtJs 实现表单联动
- bzoj1124[POI2008]枪战maf
- Linux 启动项介绍
- BW增强数据源的两种方法
- HDU 1041 Computer Transformation (简单大数)
- [转] 使用C#开发ActiveX控件
- .NET 4.6
- mongodb综述
- [设计模式] Iterator - 迭代器模式:由一份奥利奥早餐联想到的设计模式
- 消费五分钟,小白也能了解的经典技术:关于IP负载均衡(LVS之NAT)
- CAN总线学习记录之四:位定时与同步
- JavaScript获取元素尺寸和大小操作总结(转载)
- onmouseover和onmouseout的bug
- Java GC的原理
- mysql之子查询
- 使用kubernetes创建容器一直处于ContainerCreating状态的原因查找与解决
- 【OpenCV-Python】-几何变换
- 电子相册之bitmap
- Qt 学习之路 2(73):Qt 线程相关类
- python--关于if __name__==__main__的解释
热门文章
- js异步队列之理解
- HDU 1757 A Simple Math Problem( 矩阵快速幂 )
- BZOJ 3307 雨天的尾巴 (树上差分+线段树合并)
- 小学生都能学会的python(文件操作)
- 【codeforces 743E】Vladik and cards
- Java基础学习总结(47)——JAVA输入输出流再回忆
- 【转】C# winform 加载网页 模拟键盘输入自动接入访问网络
- 8个超实用的Java测试工具和框架
- STL_算法_对全部元素排序(sort、stable_sort)
- spark源代码action系列-foreach与foreachPartition