Chiryen

导航

2013年8月2日 #

种类并查集(POJ 1703)

摘要: 1703 -- Find them, Catch themhttp://poj.org/problem?id=1703题目大意:有2个敌对帮派,输入D a b表示a,b在不同帮派,输入A a b表示询问a,b是否是在一个帮派。题解:因为并查集中的元素均是有联系的,否则也不会被合并到当前集合中。那么我们就把这2个元素之间的关系量转化为一个偏移量,假设x->y 偏移量0时 x和y同帮派x->y 偏移量1时 x和y不同帮派不妨继续假设,x的当前集合根节点tx,y的当前集合根节点ty。如果tx和ty不相同,那么我们把ty合并到tx上,并且更新deltx[ty]值(注意:deltx[i]表示 阅读全文

posted @ 2013-08-02 20:46 Chiryen 阅读(217) 评论(0) 推荐(0) 编辑

并查集(HDOJ 1856)

摘要: 并查集 英文:Disjoint Set,即“不相交集合”将编号分别为1…N的N个对象划分为不相交集合,在每个集合中,选择其中某个元素代表所在集合。常见两种操作:n 合并两个集合n 查找某元素属于哪个集合并查集实现的程序代码:int set[MAXN],rank[MAXN]; //set[i]=k表示i的父节点是k,rank[]存储树的深度。int FindSet(int x){ if(set[x]!=x) set[x]=FindSet(set[x]); return set[x];}//寻找x的根节点void MakeSet(int x){ set[x]=x; rank[x]=1;}//初始化 阅读全文

posted @ 2013-08-02 10:10 Chiryen 阅读(212) 评论(0) 推荐(0) 编辑