数据结构 并查集
文章平均质量分 72
saucyJack
外科
展开
-
poj 1182 食物链(DSU)
①普通并查集: f[i]=i,表示i属于A f[i]=i+n,表示i属于B f[i]=i+2*n,表示i属于C 每次合并之前先进行判断 如果x和y属于同类,则需要判断(x,y+n)和(x,y+2*n) 如果x吃y,则需要判断(x,y)和(x+2*n,y) ②带权并查集: 每次合并压缩路径的时候, 模三取余,然后判断权值即可 附上普通并查集的代码: #includ原创 2016-03-07 08:58:00 · 264 阅读 · 0 评论 -
poj 2492 A Bug's Life(带权并查集)
题目链接:http://poj.org/problem?id=2492 用 0 1表示两种性别 用sum[i]表示节点i到根节点的距离,f[i]记录i的根节点。 f[rb]=ra; 带权路径压缩:sum[rb]=(sum[a]-sum[b]+1)%2; #include #include #include #include #include using nam原创 2016-02-09 14:18:34 · 243 阅读 · 0 评论 -
poj 1703 Find them, Catch them(Dsu)
题目链接:http://poj.org/problem?id=1703 用二维数组,第一维记录元素i(f[i][0]),第二维记录与i不在同一集合的元素j(f[i][1])。 初始化f[i][0]=i,f[i][1]=0(表示没有元素); 每次操作时,合并f[a][0]和f[b][1],f[a][1]和f[b][0]。 #include #include #include #include原创 2016-02-09 12:12:37 · 202 阅读 · 0 评论 -
POJ 2513(Trie+Hash+Dsu)
题目链接:http://poj.org/problem?id=2513 这道题存在空数据的情况,也是无语了。 建立字典树,然后哈希,给所有字符串编号,最后用并查集判断是否存在欧拉回路。 #include #include #include #include #include #include using namespace std; const int INF=0x3f3f3f3f; co原创 2016-01-25 15:52:56 · 329 阅读 · 0 评论