摘要: 原题链接:http://poj.org/problem?id=1611只要能看懂题目的都明白,就是求谁跟谁是一个集合,还得跟别的集合不相交。  本题是并查积的典型应用。如果采用暴力的解法肯定超时无疑,而且也不知道每行有多少个输入,如果声明个超大数组还有超内存的危险。如果用并查积的解法,这些都可以避免。并查积在算法导论第二十一章有详细介绍,完全可以按照书把模板写出来。首先从1到n-1,把每个数字放到一个单独的集合,集合唯一的元素就是这个数字,设为i,集合的代表也是i。然后从每行输入,没每组数中的元素所在的集合全部合并成一个集合。最后再检查和0在一个集合里面的元素的数目便大功告成了。需要小心得地方 阅读全文
posted @ 2011-02-14 20:20 like@neu 阅读(329) 评论(0) 推荐(0) 编辑
摘要: 今天有空把算法导论的并查积那一章看了一下,最后一节因为牵涉到平摊分析那一块儿所以没法看。在此之前没有学过并查积,不过感觉挺难得。其实想想也明白就该有这么东西,因为很多地方都会用到这种算法,虽然不知道是什么,但是肯定有。看并查积是因为前天在poj做了个题,感觉暴力的思路可以得出正确答案,但是数据规模极大,怀着侥幸的心理sub后直接返回了一个TLE,比较悲剧,也不明白会跟并查积扯上什么关系,上discuss里面一看,原来得用并查积。那也不也不会。刚好dp看了几天都烦了,今天就看了会儿并查积。  算法导论上是21章-用于不相交集合的数据结构,国外的书上都是这么说的。算法导论上面讲的比较详细。根据我能 阅读全文
posted @ 2011-02-14 20:07 like@neu 阅读(307) 评论(0) 推荐(0) 编辑
摘要: 主要的思考方向就是求dp里面的最长公共子序列。至于字符串本身的判别并不是重点。  根据网上poj的分类,这个题是dp求最长公共子序列,其实用暴力的方法也能通过。暴力的方法比较简单就不多说了。主要讲讲dp吧。思路就是分别求第一个字符串和第二个字符串与第三个字符串的最长公共子序列的长度是否等于其自身的长度。lcs的算法比较简单,可参考算法导论直接写出。但是仅仅判断长度是不够的。还需要考虑两点:  (1)判断第三个字符串有无多余的字符。  (2)是否存在某个字符只出现一次却是第一、二个字符串公用的。  如果只是想ac掉这道题,考虑第一点就够了,因为本题数据太弱了,我就是只考虑了第一点,当水题做的。但 阅读全文
posted @ 2011-02-14 10:03 like@neu 阅读(340) 评论(0) 推荐(0) 编辑