hdu 2473
来源:互联网 发布:java实现iis域认证 编辑:程序博客网 时间:2024/06/17 15:49
一道需要虚拟父节点的并查集题。在处理初始化数组是借鉴了别人的思路。在delete时增加需要的节点。
#include<cstdio>#include<cstring>const int maxn = 1e6 + 5;int pre[maxn], id;int fictitious[maxn];int Rank[maxn];void init(int x){ //printf("%d\n", x); for(int i = 0; i <= x; i++) pre[i] = fictitious[i] = i; memset(Rank, 0, sizeof(Rank)); id = x;}/*int root(int x){ int i, j = x; while(j != pre[j]) { j = pre[j]; } while(x != j) { i = pre[x]; pre[x] = j; x = i; } return j;}*/int root(int x){ if(x != pre[x]) pre[x] = root(pre[x]); return pre[x];}void merge_set(int x, int y){ int fx = root(x); int fy = root(y); if(fx != fy) { pre[fx] = fy; }}void set_delete(int x){ pre[id] = id; fictitious[x] = id++;}int main(){ int n, m, kase = 1; while(scanf("%d%d", &n, &m) && (m || n)) { init(n); while(m--) { char s[3]; scanf("%s", s); if(s[0] == 'M') { int t1,t2; scanf("%d%d", &t1, &t2); //printf("%d %d\n", fictitious[t1], fictitious[t2]); merge_set(fictitious[t1], fictitious[t2]); } else { int temp; scanf("%d", &temp); set_delete(temp); } } int ans = 0; for(int i = 0; i < n; i++) { int pos = root(fictitious[i]); if(Rank[pos] == 0) { Rank[pos] = 1; ans++; } } printf("Case #%d: %d\n", kase++, ans); } return 0;}
阅读全文
0 0
- hdu 2473
- hdu 2473
- hdu 2473
- hdu 2473
- hdu 2473 帮派
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- hadoop安装,并配置单节点hadoop集群
- 4.S5PV210看门狗定时器相关寄存器描述
- Hadoop 及 Hive 压缩应用
- ArrayList源码解析
- Redis笔记——技术点汇总
- hdu 2473
- 判断当前所使用python的版本和来源
- Akka(22): Stream:实时操控:动态管道连接-MergeHub,BroadcastHub and PartitionHub
- 利用ida python 实现复原函数调用的参数 (仅对数据被简单硬编码有效)
- spring boot整合Cucumber(BDD)
- 分布式缓存集群方案特性使用场景(Memcache/Redis(Twemproxy/Codis/Redis-cluster))优缺点对比及选型
- gitignore文件的添加
- 素数对--腾讯2017校招编程
- pyqt下载地址