一个堆和一个并查集对应,并且满足并查集中所有没有死的人等于堆中的人

 /**************************************************************
Problem: 1455
User: idy002
Language: C++
Result: Accepted
Time:2688 ms
Memory:32336 kb
****************************************************************/ #include <cstdio>
#define N 1000010 struct Node {
int u, w, s;
Node *ls, *rs;
void update() {
s = ;
if( ls ) s += ls->s;
if( rs ) s += rs->s;
}
}pool[N], *tail=pool, *root[N]; int n, m;
int fat[N], die[N]; int find( int a ) {
return a==fat[a] ? a : fat[a]=find(fat[a]);
}
Node *newnode( int u, int w ) {
Node *nd = ++tail;
nd->u = u;
nd->w = w;
nd->ls = nd->rs = ;
return nd;
}
Node *smerge( Node *na, Node *nb ) {
if( !na && !nb ) return ;
if( !na ) return nb;
if( !nb ) return na;
if( na->w < nb->w ) {
na->rs = smerge( na->rs, nb );
na->update();
return na;
} else {
nb->rs = smerge( nb->rs, na );
nb->update();
return nb;
}
}
int main() {
scanf( "%d", &n );
for( int i=,w; i<=n; i++ ) {
scanf( "%d", &w );
root[i] = newnode(i,w);
fat[i] = i;
}
scanf( "%d", &m );
for( int i=,u,v; i<=m; i++ ) {
char ch[];
scanf( "%s", ch );
if( ch[]=='M' ) {
scanf( "%d%d", &u, &v );
if( die[u] || die[v] ) continue;
int fu = find(u);
int fv = find(v);
if( fu==fv ) continue;
fat[fu] = fv;
root[fv] = smerge( root[fu], root[fv] );
} else {
scanf( "%d", &u );
if( die[u] ) {
printf( "0\n" );
continue;
}
int fu = find(u);
int v = root[fu]->u;
printf( "%d\n", root[fu]->w );
die[v] = true;
root[fu] = smerge( root[fu]->ls, root[fu]->rs );
}
}
}

最新文章

  1. table中某一个tr边框样式设置
  2. 黄聪:C#Winform程序如何发布并自动升级(图解)
  3. ViewManager
  4. Dual Palindromes
  5. MBB类似jquery.bxslider插件轮播效果
  6. WebKit渲染基础(转载 学习中。。。)
  7. 初始化css代码需要注意的
  8. 【原创】java 流星划过天空
  9. 输出图像到文件 imwrite()[OpenCV 笔记7]
  10. 存储过程与SQL的结合使用
  11. js在新页面中返回到上一页浏览的历史位置
  12. js函数一些小的知识点
  13. ThreadPoolExecutor的运转机制
  14. layer.load的使用
  15. string函数的一些实现
  16. JS库汇总[重要]
  17. Visual Studio 2013更新内容简介
  18. 如何用Javascript检测到所有的IE版本
  19. Mac安装mtr与brow安装
  20. Python全栈day10(运算符)

热门文章

  1. Spark记录-Scala语句(运算符-if-for-while-try-模式匹配)
  2. fastJson顺序遍历JSON字段(转)
  3. HDU 3595 every-sg模型
  4. .NET面试题系列(九)C# 结构体与类的区别
  5. js调试系列: 断点与动态调试[基础篇]
  6. 用Canvas做动画
  7. ocky勒索软件恶意样本分析2
  8. mysql数据库的快捷键
  9. 初始ASP.NET数据控件【续 ListView】
  10. java虚拟机规范(se8)——java虚拟机结构(四)