随笔分类 - 并查集
摘要:A. The Child and Homework注意仔细读题,WA了好多次,=_= 1 #include 2 #include 3 #include 4 using namespace std; 5 6 const int maxn = 110; 7 8 char s[4][maxn];...
阅读全文
摘要:设这个序列的前缀和为Si(0 2 #include 3 4 const int maxn = 15; 5 int n; 6 int G[maxn][maxn]; 7 char s[100]; 8 int sum[maxn], a[maxn]; 9 10 int topo[maxn], c[ma...
阅读全文
摘要:A. Mr. Kitayuta's Gift (枚举)题意:给一个长度不超过10的串,问能否通过插入一个字符使得新串成为回文串。分析:因为所给的串很多,所以可以枚举 “在哪插入” 和 “插入什么”,写一个二重循环枚举新串,判断是否为回文串。时间复杂度为O(n3)还可只枚举插入位置(在那个位置用一个特...
阅读全文
摘要:可能是因为这次没有分Div.1和Div.2,所以感觉题的难度比较大。题意:给出一个1~n的排列和一个邻接矩阵A,Aij = 1表示可以交换排列的第i项和第j项,问经过若干次交换后,求能够得到最小字典序的排列。分析:如果a和b可交换,b和c可交换,则a和c也可以交换位置。如果把这n个位置看做顶点,两个...
阅读全文
摘要:题意:有n个由小写字母的单词,要求判断是否存在某种排列使得相邻的两个单词,前一个单词末字母与后一个单词首字母相同。分析:将单词的两个字母看做节点,则一个单词可以看做一条有向边。那么题中所求的排列就等价于该有向图中是否存在欧拉路径。在判断之前,首先要确定这个图是连通的,代码中用并查集来实现。回顾一下存...
阅读全文
摘要:有n件商品,每件商品有它的利润和售出的最后期限,问能够得到的最大利润是多少这道题和 HDU 1789Doing Homework again 几乎一模一样,只不过这个是求最的扣分,本题是求最大利润朴素的做法是:按照每件商品的利润从大到小排序,有一个busy数组记录那天是否有东西卖出。对于每件商品,从...
阅读全文
摘要:题意:有n个电脑坏掉了,分别给出他们的坐标有两种操作,可以O x表示修好第x台电脑,可以 S x y表示x y是否连通两台电脑的距离不超过d便可连通,两台电脑是连通的可以直接连通也可以间接通过第三台电脑连通思路:每次修好一台电脑都和前面已经修好的电脑比较一下如果距离小于d而且不在同一网络,便合并在一...
阅读全文
摘要:这道题与POJ 2492 几乎一模一样,就不多说了,直接上代码吧 1 //#define LOCAL 2 #include 3 #include 4 #include 5 using namespace std; 6 7 const int maxn = 100000 + 10; 8 int...
阅读全文
摘要:题意:有编号为1到n的学生,然后有m组调查,每组调查中有a和b,表示该两个学生有同样的宗教信仰,问最多有多少种不同的宗教信仰简单并查集 1 //#define LOCAL 2 #include 3 #include 4 #include 5 using namespace std; 6 7 ...
阅读全文
摘要:题意:有编号为1~n的虫子,开始假设这种昆虫是异性恋。然后已知xi 和 yi进行交配,根据已知情况分析能否推理出其中是否有同性恋这道题和 POJ 1182 食物链 十分相似,不过在更新与父节点关系的时候要简单一些sex数组保存的是与父节点的性别关系,如果与父节点是同性,则为0,否则是1每次路径压缩的...
阅读全文
摘要:我发现我一直理解错题意了,这里的子序列指的是连续子序列,怪不得我写的LCS一直WA顺便复习一下并查集 1 //#define LOCAL 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 8 const...
阅读全文
摘要:这是一道很有质量的并查集,做完这题我对并查集又有更深一步的理解了题意:有编号1到N的A、B、C三类动物,满足A吃B,B吃C,C吃A然后有K句话说1 X Y:表示X和Y是同类2 X Y:表示X吃Y如果:X或者Y大于N,则是谎话。如果X吃X也是谎话。如果X和Y的关系能确定,并且和这句话给的X、Y的关系矛...
阅读全文
摘要:这题感觉和POJ 1988 Cube Stacking 很像,在路径压缩的同时递归出来的时候跟新distant数组我发现我一直WA的原因是,命令结束是以字母o结束的,而不是数字0!! 1 //#define LOCAL 2 #include 3 #include 4 using namespac...
阅读全文
摘要:最简单的并查集多做做水题,加深一下理解 1 //#define LOCAL 2 #include 3 4 const int maxn = 100000 + 10; 5 int parent[maxn]; 6 7 int GetParent(int a) { return parent[a] ...
阅读全文
摘要:题意:有编号为1~N的N个小木块,有两种操作M x y 将木块x所在的堆放到木块y所在的堆的上面C x 询问木块x下面有多少块木块代码巧妙就巧妙在GetParent函数中在进行路径压缩的同时,也计算好了该木块对应的under值这个需要好好体会 1 //#define LOCAL 2 #include...
阅读全文
摘要:第一道并查集,听起来很高大上的样子,其实也不难理解我感觉并查集的精髓就在那个路径压缩上面,将叶子节点直接指向根并:将两个集合合并在一起查:查询某个元素是否在该集合中题意:已知0号同学染病了,那么和他同在一个集合的同学也都可能染病了,输出可能染病的总人数标准的并查集,模板题 1 //#define L...
阅读全文