随笔分类 -  并查集

POJ 2513 Trie+并查集+欧拉回路
摘要:自己的代码超时了。。。不应该啊,方法没错哦,明天检查一下吧,网上看到一份不错的代码,不是针对于该题目,而是打印中间过程的方法,很细致,非常有利于debug#include <stdio.h> #include <string.h> //#define DEBUG #ifdef DEBUG #define debug(...) printf( __VA_ARGS__) #else #define debug(...) #endif #define M 530001 #define N 500001 struct trie_node { ... 阅读全文
posted @ 2011-10-25 00:09 geeker 阅读(302) 评论(0) 推荐(0)
POJ-1988-Cube_Stacking-并查集
摘要:http://poj.org/problem?id=1988看黑书看到并查集,练了一道并查集的题目,很典型,不是很难,但是细节上的处理还是比较容易出错的。理解题意之后,首先对状态进行建模。分别建立三个数组,意义如下int father[i];//记录 i 的父亲节点,注意不一定是根节点,路径压缩之后才一定是根节点int total[i];//记录集合中元素个数,仅当i为根节点该值才有意义int deep[i];//每棵树距离父亲的距离,注意不是根树,所以每次进行路径压缩压缩的时候,将原父亲改为根节点时不要忘记将深度值也同时进行修改如果输入为Mi j 那么就调用合并函数unin(i,j)如果输入 阅读全文
posted @ 2011-10-16 01:26 geeker 阅读(235) 评论(0) 推荐(0)
数据结构与算法(4)——并查集
摘要:并查集 维护一些不相交的集合,它是一个集合的集合。每个元素恰好属于一个集合,好比每条鱼装在一个鱼缸里。每个集合S有一个元素作为\集合代表"rep[S],好比每个鱼缸选出一条"鱼王"。并查集提供三种操作:MakeSet(x):建立一个新集合x。x应该不在现有的任何一个集合中出现。Find(S, x):返回x所在集合的代表元素。Union(x, y):把x所在的集合和y所在的集合合并。森林表示法可以用一棵森林表示并查集,森林里的每棵树表示一个集合,树根就是集合的代表元素。一个集合还可以用很多种树表示,只要树中的结点不变,表示的都是同一个集合。合并操作只需要将一棵树的根 阅读全文
posted @ 2011-05-08 21:13 geeker 阅读(2408) 评论(0) 推荐(2)
POJ 1182 食物链,并查集的拓展
摘要:http://poj.org/problem?id=1182/********************************************************此道题目 前天看的时候一点头绪都没有,看了他人的解题报告后也几乎看不懂,但是首先做了两道并查集的基础题目POJ1611,与POJ2524,熟悉并查集的结构,又做了两道并查集的拓展题目POJ2492与1703,,在充分了解并可以熟悉运用并查集后,此题便可迎刃而解了,也通过此题发现了自学的诀窍“循序渐进”,刚刚AC掉食物链问题,有些小激动,遂发此感慨,呵呵~~~********************************* 阅读全文
posted @ 2011-04-26 22:37 geeker 阅读(697) 评论(0) 推荐(0)
POJ 1703 并查集的应用
摘要:http://poj.org/problem?id=1703//POJ 1703 几乎和POJ2492一模一样,不再对并查集的建立做解释//参考POJ2492的注释View Code 1 #include<iostream> 2 usingnamespace std; 3 /**********************************************************/ 4 int p[100010],r[100010]; 5 int T,N,M,a,b; 6 char flag; 7 /************************************ 阅读全文
posted @ 2011-04-26 22:35 geeker 阅读(410) 评论(0) 推荐(0)
POJ 2492 并查集的应用推广
摘要:View Code 1 /************************************************************/ 2 //并查集的应用推广//POJ2492 3 /************************************************************/ 4 5 #include<iostream> 6 usingnamespace std; 7 // r[i] 0代表r[i]与i同性, 1代表i与r[i]异性 8 int n,p[2002],r[2002]; 9 10 /********************* 阅读全文
posted @ 2011-04-26 22:31 geeker 阅读(456) 评论(0) 推荐(0)
POJ1611__并查集的基础应用
摘要:题目地址:http://poj.org/problem?id=1611/************************************************************************大致题意:一共有n个学生(编号0 至 n-1),m个组,一个学生可以同时加入不同的组。现在有一种传染病,如果一个学生被感染,那么和他同组的学生都会被感染。现在已知0号学生被感染,问一共有多少个人被感染。首先将每个学生都初始化为一个集合,然后将同组的学生合并,设置一个数组num[]来记录每个集合中元素的个数,最后只要输出0号学生所在集合中元素的个数即可。*************** 阅读全文
posted @ 2011-04-26 22:28 geeker 阅读(353) 评论(0) 推荐(1)