03 2011 档案

摘要:/*LCA问题,离线tarjan算法*/// include file#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <cctype>#include <ctime>#include <iostream>#include <sstream>#include <fstream>#include <iomanip>#include <bitset>#includ 阅读全文
posted @ 2011-03-28 15:58 AC2012 阅读(151) 评论(0) 推荐(0)
摘要:/*我实现的LCA tarjan算法(离线)*/// include file#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <cctype>#include <ctime>#include <iostream>#include <sstream>#include <fstream>#include <iomanip>#include <bitset>#in 阅读全文
posted @ 2011-03-28 15:34 AC2012 阅读(159) 评论(0) 推荐(0)
摘要:/*解决方法好多:1. KMP2. Hash这个题目不能直接的套用KMP模板来解决计算实时排名非常关键首先求next数组时,不能在像往常的来判断两个字符相等了,而是要判断其动态排名是相等的。求动态的排名是这道题目的关键。不过求解起来确实是有点的繁琐的.*/// include file#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <cctype>#include <ctime>#include <iostre 阅读全文
posted @ 2011-03-25 23:06 AC2012 阅读(135) 评论(0) 推荐(0)
摘要:/*KMP来做532ms*/// include file#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <cctype>#include <ctime>#include <iostream>#include <sstream>#include <fstream>#include <iomanip>#include <bitset>#include < 阅读全文
posted @ 2011-03-25 14:16 AC2012 阅读(152) 评论(0) 推荐(0)
摘要:/*枚举+KMP*/// include file#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <cctype>#include <ctime>#include <iostream>#include <sstream>#include <fstream>#include <iomanip>#include <bitset>#include <strs 阅读全文
posted @ 2011-03-25 13:15 AC2012 阅读(172) 评论(0) 推荐(0)
摘要:/*KMP算法错了好几次,理解出错,其实是要求出个最基本的小矩阵,能够产生原来的矩阵这个基本矩阵不一定比原来的矩阵小*/// include file#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <cctype>#include <ctime>#include <iostream>#include <sstream>#include <fstream>#include <i 阅读全文
posted @ 2011-03-25 11:18 AC2012 阅读(129) 评论(0) 推荐(0)
摘要:/*KMP算法*/// include file#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <cctype>#include <ctime>#include <iostream>#include <sstream>#include <fstream>#include <iomanip>#include <bitset>#include <strst 阅读全文
posted @ 2011-03-24 23:44 AC2012 阅读(242) 评论(0) 推荐(0)
摘要:/*KMP算法思想*/// include file#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <cctype>#include <ctime>#include <iostream>#include <sstream>#include <fstream>#include <iomanip>#include <bitset>#include <str 阅读全文
posted @ 2011-03-24 23:23 AC2012 阅读(156) 评论(0) 推荐(0)
摘要:/*KMP 算法的应用这个题目可以这么理解,算出next[len]之后,那么根据重复字串的性质它有个必要条件是,len-next[len]的大小就是重复字串的长度,这是个必要条件如果这个条件不满足的话,那么它必定没有重复字串。*/// include file#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <cctype>#include <ctime>#include <iostream>#includ 阅读全文
posted @ 2011-03-24 22:13 AC2012 阅读(141) 评论(0) 推荐(0)
摘要:/*KMP算法KMP思想的精华是求模式串的失败函数,所谓的失败函数是指如果在匹配的过程失败了,模式串要返回到哪个位置。此时可以很明显的发现。加入此时是i位置匹配失败那么pattern[0...i-1]的某个前缀和某个后缀可能会相等。如果相等的话,那么我们就可以从这个前缀的下个位置开始搜,而不用从头开始搜这也是和暴力算法的蛮力搜高明的地方。*/// include file#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <cctype& 阅读全文
posted @ 2011-03-24 21:14 AC2012 阅读(133) 评论(0) 推荐(0)
摘要:/*rabin-karp算法基本思想是:把该字符集当成一个整数来看待比较字符串转化的整数来判断两个字符串是否相等对于这个题目,有几个疑问,N如果很大,那么int不就超了嘛,可是却能AC.理论上 应该去摸一个大质数的*/// include file#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <cctype>#include <ctime>#include <iostream>#include < 阅读全文
posted @ 2011-03-22 23:58 AC2012 阅读(120) 评论(0) 推荐(0)
摘要:/*利用字符串hash函数,一般常用的hash函数是BKDRhash.*/// include file#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <cctype>#include <ctime>#include <iostream>#include <sstream>#include <fstream>#include <iomanip>#include < 阅读全文
posted @ 2011-03-22 19:22 AC2012 阅读(213) 评论(0) 推荐(0)
摘要:// include file#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <cctype>#include <ctime>#include <iostream>#include <sstream>#include <fstream>#include <iomanip>#include <bitset>#include <strstream># 阅读全文
posted @ 2011-03-22 17:39 AC2012 阅读(162) 评论(0) 推荐(0)
摘要:/* 应该算个简单题*/// include file#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <cctype>#include <ctime>#include <iostream>#include <sstream>#include <fstream>#include <iomanip>#include <bitset>#include <st 阅读全文
posted @ 2011-03-19 23:59 AC2012 阅读(235) 评论(0) 推荐(0)
摘要:/*宽度优先搜索啥时候才能杜绝小错误呢,以后ij一定不在搞混了*/// include file#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <cctype>#include <ctime>#include <iostream>#include <sstream>#include <fstream>#include <iomanip>#include <bits 阅读全文
posted @ 2011-03-19 20:45 AC2012 阅读(371) 评论(0) 推荐(0)
摘要:/*动归,自己开始没搞清楚,怎样来表达只有当休息为0的时候才继续跑步或者休息如果休息的话,不参与计算任务。*/// include file#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <cctype>#include <ctime>#include <iostream>#include <sstream>#include <fstream>#include <iomani 阅读全文
posted @ 2011-03-19 15:27 AC2012 阅读(312) 评论(0) 推荐(0)
摘要:/* 构图很关键,由于是开区间,所以可以把顶点之间的边当成是线段之间的点。 每条线段之间的边的容量定义为k,说明这个线段只能交叉k次。,k次之后就不能从这个线段交叉过去了。 好题*/// include file#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <cctype>#include <ctime>#include <iostream>#include <sstream>#includ 阅读全文
posted @ 2011-03-19 11:15 AC2012 阅读(213) 评论(0) 推荐(0)
摘要:/*构图很重要,每个点可以拆开成两点两点之间连边,一条边是容量为1的正常边,一天变为容量很大的边,为了避免费用的多次计算设置的边,因为没个点都可以多次经过为了不多次计算费用,所以要多设置这条边,这也是这道题的精华之处此题是最大费用最大流*/// include file#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <cctype>#include <ctime>#include <iostream>#i 阅读全文
posted @ 2011-03-18 21:38 AC2012 阅读(240) 评论(0) 推荐(0)
摘要:/*很明显是最小费用最大流,中间所有的路径的流都是1,费用是路径长度 由于顶点太多,必须使用邻接表了*/// include file#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <cctype>#include <ctime>#include <iostream>#include <sstream>#include <fstream>#include <iomanip&g 阅读全文
posted @ 2011-03-18 19:43 AC2012 阅读(179) 评论(0) 推荐(0)
摘要:/*最小费用最大流,增广路径用基于bellmanford算法的queue改进版本邻接矩阵实现 */// include file#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <cctype>#include <ctime>#include <iostream>#include <sstream>#include <fstream>#include <iomanip># 阅读全文
posted @ 2011-03-17 23:28 AC2012 阅读(142) 评论(0) 推荐(0)
摘要:/*1000个联系人 N500个群 M使得最大那个群的人数最少,每个人都可以去好几个群,这样就有很多选择了。每个群最多有 N个人,所以二分答案然后建图,看是否满足条件,最后找到一个最佳答案初试的想法WA,所以现在用笨的方法,人数和群都算顶点,这样就有1502个点,矩阵不行了,邻接表上,最快的方法是二分+二分图多重匹配。 不过我暂时只是练习网络流了*/// include file#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <cct 阅读全文
posted @ 2011-03-17 17:16 AC2012 阅读(382) 评论(0) 推荐(0)
摘要:1 // include file 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cstring> 5 #include <cmath> 6 #include <cctype> 7 #include <ctime> 8 9 #include <iostream> 10 #include <sstream> 11 #include <fstream> 12 #include <iomanip> 13 #include 阅读全文
posted @ 2011-03-16 21:41 AC2012 阅读(354) 评论(0) 推荐(0)
摘要:1 /* 2 好题啊,建图可真有意思的一件事 3 4 建图,关键是搞清楚什么事源,什么是汇 5 6 比如此题,源就是猪圈有几头猪,所以source到商人之间的容量时猪圈的里有多少 头猪 7 8 商人到汇点之间的容量是商人要买多少头猪的要求了 9 10 这个必须要搞清楚,因为这个错误N次 11 12 其次,如果有两个商人之间有同一个猪圈的钥匙,那么此商人的流可以直接转到另外几个持有同样钥匙的商人,容量可以无限大。 13 14 这是个非常的经典的网络流题目,非常的好的 15 */ 16 17 // include file 18 #include <cstdio> 19 #includ 阅读全文
posted @ 2011-03-16 21:02 AC2012 阅读(1019) 评论(0) 推荐(0)
摘要:/*邻接表实现ISAP此题加了多个优化 间隙优化 ,current弧优化, 还有返回到0边优化终极79ms了,改日再优化*/// include file#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <cctype>#include <ctime>#include <iostream>#include <sstream>#include <fstream>#include < 阅读全文
posted @ 2011-03-16 15:37 AC2012 阅读(229) 评论(0) 推荐(0)
摘要:/*邻接矩阵实现ISAP间隙优化,current*/// include file#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <cctype>#include <ctime>#include <iostream>#include <sstream>#include <fstream>#include <iomanip>#include <bitset># 阅读全文
posted @ 2011-03-16 15:35 AC2012 阅读(154) 评论(0) 推荐(0)
摘要:/*邻接矩阵实现ISAP算法1459(4)进行再次优化*/// include file#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <cctype>#include <ctime>#include <iostream>#include <sstream>#include <fstream>#include <iomanip>#include <bitset&g 阅读全文
posted @ 2011-03-16 15:34 AC2012 阅读(240) 评论(0) 推荐(0)
摘要:/* 能想到的优化都加了*/// include file#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <cctype>#include <ctime>#include <iostream>#include <sstream>#include <fstream>#include <iomanip>#include <bitset>#include < 阅读全文
posted @ 2011-03-16 15:33 AC2012 阅读(136) 评论(0) 推荐(0)
摘要:/*最大流之 ISAP篇,2400+ms,写了一晚上,累死了,纯粹的自己的版本,先放出个邻接表的版本。少了current优化,tle很久*/// include file#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <cctype>#include <ctime>#include <iostream>#include <sstream>#include <fstream>#inc 阅读全文
posted @ 2011-03-15 23:49 AC2012 阅读(401) 评论(0) 推荐(0)
摘要:1 /* 2 求割边,暴力LCA 3 */ 4 5 // include file 6 #include <cstdio> 7 #include <cstdlib> 8 #include <cstring> 9 #include <cmath> 10 #include <cctype> 11 #include <ctime> 12 13 #include <iostream> 14 #include <sstream> 15 #include <fstream> 16 #include 阅读全文
posted @ 2011-03-14 14:56 AC2012 阅读(719) 评论(0) 推荐(0)
摘要:1 /* 2 用边来保存点连通分量似乎更好理解 3 */ 4 5 6 7 // include file 8 #include <cstdio> 9 #include <cstdlib> 10 #include <cstring> 11 #include <cmath> 12 #include <cctype> 13 #include <ctime> 14 15 #include <iostream> 16 #include <sstream> 17 #include <fstream> 阅读全文
posted @ 2011-03-14 12:54 AC2012 阅读(198) 评论(0) 推荐(0)
摘要:1 /* 2 题目大意是:一些骑士,他们都有自己的仇人,所以安排座位的时候,必须邻座没有仇人。 3 但是某些人可能无法安排座位,问无法安排座位的人有多少个 4 5 解法:把所有的仇人关系建立图,求补图,在补图中,所有连接边的两个顶点可以做邻居 6 这个图可能存在割点,所以我们要找出连通分量,如果连通分量存在奇圈,那么可以满足,如果不存在 7 去除所有该连通分量的人 8 9 最后输出去除的人数 10 11 这道题让我知道了我写的点连通分量是有问题的,在碰到割点的时候,从栈中输出分量,碰到割点连接的儿子的时候停止 12 可是我写的是当下一个点是割点的时候停止,就这一点小小的不同,就一直WA.现在. 阅读全文
posted @ 2011-03-14 10:10 AC2012 阅读(472) 评论(0) 推荐(0)
摘要:1 // include file 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cstring> 5 #include <cmath> 6 #include <cctype> 7 #include <ctime> 8 9 #include <iostream> 10 #include <sstream> 11 #include <fstream> 12 #include <iomanip> 13 #include 阅读全文
posted @ 2011-03-13 00:17 AC2012 阅读(445) 评论(0) 推荐(0)
摘要:1 /* 2 此题出了求割点外,还要求割点把连通图分成了几个连通分量。 3 */ 4 5 // include file 6 #include <cstdio> 7 #include <cstdlib> 8 #include <cstring> 9 #include <cmath> 10 #include <cctype> 11 #include <ctime> 12 13 #include <iostream> 14 #include <sstream> 15 #include <fstre 阅读全文
posted @ 2011-03-12 23:46 AC2012 阅读(552) 评论(0) 推荐(0)
摘要:1 /* 2 找无向连通的割点 3 */ 4 5 // include file 6 #include <cstdio> 7 #include <cstdlib> 8 #include <cstring> 9 #include <cmath> 10 #include <cctype> 11 #include <ctime> 12 13 #include <iostream> 14 #include <sstream> 15 #include <fstream> 16 #include & 阅读全文
posted @ 2011-03-12 22:55 AC2012 阅读(1644) 评论(0) 推荐(0)
摘要:1 /* 2 我这种方法,其实就是把各个连通分量的点集找出来了 3 */ 4 5 // include file 6 #include <cstdio> 7 #include <cstdlib> 8 #include <cstring> 9 #include <cmath> 10 #include <cctype> 11 #include <ctime> 12 13 #include <iostream> 14 #include <sstream> 15 #include <fstream&g 阅读全文
posted @ 2011-03-11 20:19 AC2012 阅读(499) 评论(0) 推荐(0)
摘要:1 /* 2 每两点之间有环存在 3 4 如果有一个环,所有的顶点都在这个环上,那么也就满足了 5 6 3352相似 7 8 找出桥,把不含桥的连通分量缩点,构造成一颗树,树种度为1的点为x个,(x+1)/2; 9 缩点是用并查集来做的。 10 */ 11 // include file 12 #include <cstdio> 13 #include <cstdlib> 14 #include <cstring> 15 #include <cmath> 16 #include <cctype> 17 #include <cti 阅读全文
posted @ 2011-03-11 16:50 AC2012 阅读(808) 评论(1) 推荐(0)
摘要:1 /* 2 二分好题 3 */ 4 5 // include file 6 #include <cstdio> 7 #include <cstdlib> 8 #include <cstring> 9 #include <cmath> 10 #include <cctype> 11 #include <ctime> 12 13 #include <iostream> 14 #include <sstream> 15 #include <fstream> 16 #include <i 阅读全文
posted @ 2011-03-11 10:59 AC2012 阅读(402) 评论(0) 推荐(0)
摘要:1 /* 2 宽度优先搜索 BFS 3 */ 4 // include file 5 #include <cstdio> 6 #include <cstdlib> 7 #include <cstring> 8 #include <cmath> 9 #include <cctype> 10 #include <ctime> 11 12 #include <iostream> 13 #include <sstream> 14 #include <fstream> 15 #include &l 阅读全文
posted @ 2011-03-11 10:30 AC2012 阅读(386) 评论(0) 推荐(0)
摘要:1 /* 2 解方程组 3 */ 4 // include file 5 #include <cstdio> 6 #include <cstdlib> 7 #include <cstring> 8 #include <cmath> 9 #include <cctype>10 #include <ctime>11 12 #include <iostream>13 #include <sstream>14 #include <fstream>15 #include <iomanip&g 阅读全文
posted @ 2011-03-11 09:49 AC2012 阅读(149) 评论(0) 推荐(0)
摘要:1 // include file 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cstring> 5 #include <cmath> 6 #include <cctype> 7 #include <ctime> 8 9 #include <iostream> 10 #include <sstream> 11 #include <fstream> 12 #include <iomanip> 13 #include 阅读全文
posted @ 2011-03-11 00:16 AC2012 阅读(276) 评论(0) 推荐(0)
摘要:1 /* 2 差分约束系统可以做 3 4 dijkstra+ priority_queue 600+ms 5 */ 6 7 // include file 8 #include <cstdio> 9 #include <cstdlib> 10 #include <cstring> 11 #include <cmath> 12 #include <cctype> 13 #include <ctime> 14 15 #include <iostream> 16 #include <sstream> 17 阅读全文
posted @ 2011-03-10 23:53 AC2012 阅读(147) 评论(0) 推荐(0)
摘要:1 /* 2 差分约束系统可以做 3 4 映射二叉堆 5 6 用 堆优化的bellman_ford.594ms 7 8 */ 9 10 // include file 11 #include <cstdio> 12 #include <cstdlib> 13 #include <cstring> 14 #include <cmath> 15 #include <cctype> 16 #include <ctime> 17 18 #include <iostream> 19 #include <sstrea 阅读全文
posted @ 2011-03-10 22:47 AC2012 阅读(389) 评论(0) 推荐(0)
摘要:1 /* 2 这题真没意思,太水了。枚举就可以,我还想了二分的思想 3 */ 4 5 // include file 6 #include <cstdio> 7 #include <cstdlib> 8 #include <cstring> 9 #include <cmath> 10 #include <cctype> 11 #include <ctime> 12 13 #include <iostream> 14 #include <sstream> 15 #include <fstream 阅读全文
posted @ 2011-03-10 19:57 AC2012 阅读(128) 评论(0) 推荐(0)
摘要:1 /* 2 动态规划,容易的。 3 4 0ms是怎么来的??? 5 */ 6 // include file 7 #include <cstdio> 8 #include <cstdlib> 9 #include <cstring> 10 #include <cmath> 11 #include <cctype> 12 #include <ctime> 13 14 #include <iostream> 15 #include <sstream> 16 #include <fstream&g 阅读全文
posted @ 2011-03-10 19:19 AC2012 阅读(202) 评论(0) 推荐(0)
摘要:1 /* 2 动态规划 3 4 这个题目我用了两个角度来考虑 5 6 起初的想法就是,f[i]表示到达i位置时,可匹配的最大字符数目 7 8 f[i] = max(f[i],f[x-len[word]]+len[word]); 9 也就是说,如果找到了一个word可以匹配,那么就是上面的状态方程了 10 最后的答案就是L-f[L]; 11 12 然后看到大多人都是f[i]表示到达i可删除的最小字符数目 13 14 f[i] = min(f[i],f[x-len[word]]+i-is-len[word]); 15 is是word匹配的第一个字符的位置 16 然后最后的答案就是f[L] 17 . 阅读全文
posted @ 2011-03-10 14:48 AC2012 阅读(683) 评论(0) 推荐(0)
摘要:1 /* 2 数学题 3 */ 4 5 // include file 6 #include <cstdio> 7 #include <cstdlib> 8 #include <cstring> 9 #include <cmath> 10 #include <cctype> 11 #include <ctime> 12 13 #include <iostream> 14 #include <sstream> 15 #include <fstream> 16 #include <io 阅读全文
posted @ 2011-03-10 11:35 AC2012 阅读(154) 评论(0) 推荐(0)
摘要:1 /* 2 求阶乘N! 质数分解后2的幂是多少 3 4 快速的解法是 N/2 + N/4 + .... 5 6 数论好题,特别对于对这个不是很清楚的时候,收益很大 7 */ 8 9 // include file 10 #include <cstdio> 11 #include <cstdlib> 12 #include <cstring> 13 #include <cmath> 14 #include <cctype> 15 #include <ctime> 16 17 #include <iostream> 阅读全文
posted @ 2011-03-10 10:36 AC2012 阅读(321) 评论(0) 推荐(0)
摘要:1 /* 2 此题居然可以用二分来做,首先二分出答案。 3 4 然后判断答案是否合理,问题在于给出一个答案的时候,如何判断合理性 5 6 分析:假如X是答案,既然是答案,那么就把它当成最终的答案,这个可以理解吧。现在对于N个花费,从第一天开始算起 7 算连续几天的和直到大于X为止,然后在从这个截止的天开始从新算,如此类推,因为是答案所以可以这么计算,最后看能算出几个月来,如果 8 在要求的月数之内,那么就符合要求。最后找出最大的答案就是了 9 10 好题 11 */ 12 13 // include file 14 #include <cstdio> 15 #include < 阅读全文
posted @ 2011-03-10 09:42 AC2012 阅读(648) 评论(0) 推荐(0)
摘要:1 // include file 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cstring> 5 #include <cmath> 6 #include <cctype> 7 #include <ctime> 8 9 #include <iostream> 10 #include <sstream> 11 #include <fstream> 12 #include <iomanip> 13 #include 阅读全文
posted @ 2011-03-09 21:04 AC2012 阅读(290) 评论(0) 推荐(0)
摘要:1 /* 2 堆栈练习好题 3 4 也可线段树过 5 */ 6 7 // include file 8 #include <cstdio> 9 #include <cstdlib> 10 #include <cstring> 11 #include <cmath> 12 #include <cctype> 13 #include <ctime> 14 15 #include <iostream> 16 #include <sstream> 17 #include <fstream> 18 阅读全文
posted @ 2011-03-09 20:01 AC2012 阅读(210) 评论(0) 推荐(0)
摘要:1 /* 2 数学题,矩阵相乘 3 4 关于二维矩阵在递归上的分析搞的我头大了,错了,也不知道哪错了。~ 5 6 S = A + A^2 + A^3 + A^4 + A^5 + ... 7 8 B = A I A I 9 0 I 0 I 10 11 B^2 = A^2 A+I A I 12 0 I 0 I 13 14 B^3 = A^3 A^2+A+I A I 15 0 I 0 I 16 17 B^4 = A^4 A^3+A^2+A^1+I 18 0 I 19 20 21 */ 22 23 // include file 24 #include <cstdio> 25 #inclu 阅读全文
posted @ 2011-03-09 18:39 AC2012 阅读(927) 评论(0) 推荐(0)
摘要:1 /* 2 数学计算题,居然一次通过,RP那是大大的提高 3 */ 4 // include file 5 #include <cstdio> 6 #include <cstdlib> 7 #include <cstring> 8 #include <cmath> 9 #include <cctype> 10 #include <ctime> 11 12 #include <iostream> 13 #include <sstream> 14 #include <fstream> 15 阅读全文
posted @ 2011-03-09 11:00 AC2012 阅读(331) 评论(0) 推荐(0)
摘要:1 /* 2 好题,把哈夫曼编码的思想融汇进来 3 初看好像是贪心,结果是错的。后来举个例子,发现,贪心果然不行。 4 5 可把所有的木板的长度看成是一课二叉树的叶子节点。为什么要二叉树呢?因为根据题意,每个木板切开之后会形成左右两个木板 6 可以模型化为二叉树。最后的问题可以归结为:所有叶子节点的权乘以路径长度的和,也就是说带权路径长度的和的最小值了 7 这其实就是求最优二叉树(哈弗曼树) 8 9 带权路径长度综合 10 weighted path length of tree 11 哈夫曼编码 12 */ 13 14 // include file 15 #include <cstd 阅读全文
posted @ 2011-03-09 10:23 AC2012 阅读(360) 评论(0) 推荐(0)
摘要:1 /* 2 简单题,题意是求每个人赢了多少次,赢的次数最多的那个人是代表 3 */ 4 5 #include <cstdio> 6 #include <cstdlib> 7 int n,a,ans,anss,sum; 8 int main() 9 {10 scanf("%d",&n);11 anss = 0;12 for(int i=0;i<n;i++)13 {14 sum = 0;15 for(int j=0;j<n;j++)16 {17 scanf("%d",&a);18 if(a==3) sum 阅读全文
posted @ 2011-03-08 21:11 AC2012 阅读(135) 评论(0) 推荐(0)
摘要:1 /* 2 数学题,虽然简单,但是还要要仔细思考下的 3 4 题目意思是说,对于N个硬币,不管初试的正反情况如何,都可以通过K次的调整达到全反全正的情况,必须是K次 5 对于所有的情况都是K次 6 7 现在假如N是奇数 8 9 那么最大可能的调整次数是N-1,而N-1是偶数,N是奇数个硬币,不管怎么组合,最后必然是奇数个正和偶数个反或者奇数个反偶数个正,N-1次(偶数)的反转对于偶数永远是成立的10 所以N-1对于N是奇数的情况,永远都可以调整过来11 12 如果N是偶数,那么最大的调整是N-1(奇数),N的组合可以是偶偶,或者奇奇,N-1(奇数)对于偶偶永远都不成立,所以对于N是偶数的情. 阅读全文
posted @ 2011-03-08 20:53 AC2012 阅读(192) 评论(0) 推荐(0)
摘要:1 /* 2 数学题 3 4 对于一个2^N的环,采用 5 从0开始,隔0,1,2,3,4,5,6....的方式去涂色,2^N步之后,刚好每个被涂色一次。如果不是2^N形式的个数, 6 会有些位置永远都无法到达 7 */ 8 #include <cstdio> 9 int main()10 {11 int N;12 while(scanf("%d",&N)!=-1)13 {14 if(N&(N-1))15 puts("NO");16 else17 puts("YES");18 }19 return 0;20 阅读全文
posted @ 2011-03-08 19:31 AC2012 阅读(184) 评论(0) 推荐(0)
摘要:1 // include file 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cstring> 5 #include <cmath> 6 #include <cctype> 7 #include <ctime> 8 9 #include <iostream> 10 #include <sstream> 11 #include <fstream> 12 #include <iomanip> 13 #include 阅读全文
posted @ 2011-03-08 18:22 AC2012 阅读(338) 评论(0) 推荐(0)
摘要:1 // include file 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cstring> 5 #include <cmath> 6 #include <cctype> 7 #include <ctime> 8 9 #include <iostream>10 #include <sstream>11 #include <fstream>12 #include <iomanip>13 #include < 阅读全文
posted @ 2011-03-08 17:15 AC2012 阅读(214) 评论(0) 推荐(0)
摘要:1 // include file 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cstring> 5 #include <cmath> 6 #include <cctype> 7 #include <ctime> 8 9 #include <iostream> 10 #include <sstream> 11 #include <fstream> 12 #include <iomanip> 13 #include 阅读全文
posted @ 2011-03-08 17:07 AC2012 阅读(471) 评论(0) 推荐(0)
摘要:1 // include file 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cstring> 5 #include <cmath> 6 #include <cctype> 7 #include <ctime> 8 9 #include <iostream> 10 #include <sstream> 11 #include <fstream> 12 #include <iomanip> 13 #include 阅读全文
posted @ 2011-03-08 13:34 AC2012 阅读(237) 评论(0) 推荐(0)
摘要:1 // include file 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cstring> 5 #include <cmath> 6 #include <cctype> 7 #include <ctime> 8 9 #include <iostream> 10 #include <sstream> 11 #include <fstream> 12 #include <iomanip> 13 #include 阅读全文
posted @ 2011-03-08 13:12 AC2012 阅读(224) 评论(0) 推荐(0)
摘要:1 /* 2 约瑟夫环的数学解法 3 4 举个例子来说明这个问题 5 6 比如有6个人,编号是从 0 1 2 3 4 5 7 每数5个人,出来一个。现在对于 N=6的情况,开始都是从0开始 8 那么4这个数字要出列,而新的数列变成了 9 10 5 0 1 2 3 11 | | | | | 12 0 1 2 3 4 13 14 把5 0 1 2 3重新编号,则成了N=5的子问题了,现在如果求除了F[5],那么F[6]怎么得到呢? 15 16 对于N=5,出列的数字是4,其对应于3,很显然对于N=6确实是这样的。从4到3,可以采用 17 (4+5)%6来转换 18 | | 19 K N 20 2. 阅读全文
posted @ 2011-03-08 10:40 AC2012 阅读(290) 评论(0) 推荐(0)
摘要:1 /* 2 最小生成树 3 4 可用克鲁斯卡尔算法 5 6 可枚举最短边 7 */ 8 9 // include file 10 #include <cstdio> 11 #include <cstdlib> 12 #include <cstring> 13 #include <cmath> 14 #include <cctype> 15 #include <ctime> 16 17 #include <iostream> 18 #include <sstream> 19 #include < 阅读全文
posted @ 2011-03-08 09:59 AC2012 阅读(942) 评论(0) 推荐(0)
摘要:1 // include file 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cstring> 5 #include <cmath> 6 #include <cctype> 7 #include <ctime> 8 9 #include <iostream> 10 #include <sstream> 11 #include <fstream> 12 #include <iomanip> 13 #include 阅读全文
posted @ 2011-03-08 01:31 AC2012 阅读(292) 评论(0) 推荐(0)
摘要:1 // include file 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cstring> 5 #include <cmath> 6 #include <cctype> 7 #include <ctime> 8 9 #include <iostream> 10 #include <sstream> 11 #include <fstream> 12 #include <iomanip> 13 #include 阅读全文
posted @ 2011-03-08 01:11 AC2012 阅读(264) 评论(0) 推荐(0)
摘要:1 // include file 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cstring> 5 #include <cmath> 6 #include <cctype> 7 #include <ctime> 8 9 #include <iostream>10 #include <sstream>11 #include <fstream>12 #include <iomanip>13 #include < 阅读全文
posted @ 2011-03-08 00:28 AC2012 阅读(228) 评论(0) 推荐(0)
摘要:1 // include file 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cstring> 5 #include <cmath> 6 #include <cctype> 7 #include <ctime> 8 9 #include <iostream> 10 #include <sstream> 11 #include <fstream> 12 #include <iomanip> 13 #include 阅读全文
posted @ 2011-03-08 00:17 AC2012 阅读(196) 评论(0) 推荐(0)
摘要:1 /* 2 这个题目有点意思,并不是求总共需要多长时间来完成订单, 3 而是要求完成顶点的总时间。 4 5 这个总时间是包括订单的等待时间的 6 7 因为有可能有多个订单都要到工厂j去完成,那么就浪费了很多时间,这些时间也算是总时间里面的 8 9 所以。每个工厂有可能有N个订单在等待来完成,所以工厂要拆开成N个点来构图 10 11 注意此题的左右顶点不同,和传统的KM写的时候要注意点,不然会TLE或者WA的不明不白 12 */ 13 14 // include file 15 #include <cstdio> 16 #include <cstdlib> 17 #in 阅读全文
posted @ 2011-03-07 20:33 AC2012 阅读(904) 评论(0) 推荐(0)
摘要:1 /* 2 配对问题,蚂蚁和苹果树之间的距离和最小的时候,肯定是不相交的时候 3 4 利用的是三角不等式原理 5 6 可用KM算法解决 7 */ 8 9 // include file 10 #include <cstdio> 11 #include <cstdlib> 12 #include <cstring> 13 #include <cmath> 14 #include <cctype> 15 #include <ctime> 16 17 #include <iostream> 18 #include 阅读全文
posted @ 2011-03-07 18:20 AC2012 阅读(755) 评论(0) 推荐(0)
摘要:1 /* 2 二分匹配的题目真的有意思 3 如何把问题转化为二分图模型,这才是问题的关键,其他都是浮云 4 */ 5 6 // include file 7 #include <cstdio> 8 #include <cstdlib> 9 #include <cstring> 10 #include <cmath> 11 #include <cctype> 12 #include <ctime> 13 14 #include <iostream> 15 #include <sstream> 16 # 阅读全文
posted @ 2011-03-07 16:37 AC2012 阅读(924) 评论(0) 推荐(0)
摘要:1 /* 2 应用KM算法,求最小权和 3 4 当然也可以使用最小费用最大流来做 5 6 此题目非常的有意思 7 8 首先对于KM的使用,改怎么用? 9 10 因为K个商品之间没有什么关系,所以对每个商品建一个二分图,求出最小权和,就是最后的结果 11 12 然而对于每一幅二分图改怎么建立呢,因为KM是完备匹配,所以每个商人需要几个该商品,就需要几个点,也就是说左边的N个 13 商人要按照他们需要多少商品拆点,右边同样如此。这样一个活生生的带权二分图就呈现在我们眼前了 14 剩下的就是KM的事情啦 15 哈哈~~ 16 */ 17 18 // include file 19 #include. 阅读全文
posted @ 2011-03-07 14:58 AC2012 阅读(514) 评论(0) 推荐(0)
摘要:1 /* 2 最小权完备匹配 3 4 这题目是 带权二分图的最大/小权问题,可以用hungarian算法的扩展算法Kuhn-Munkres算法来解决 5 6 Kuhn-Munkres算法利用二分图最大匹配的思想来找出最大/小权匹配 7 */ 8 9 // include file 10 #include <cstdio> 11 #include <cstdlib> 12 #include <cstring> 13 #include <cmath> 14 #include <cctype> 15 #include <ctime&g 阅读全文
posted @ 2011-03-07 10:38 AC2012 阅读(893) 评论(0) 推荐(0)
摘要:1 // include file 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cstring> 5 #include <cmath> 6 #include <cctype> 7 #include <ctime> 8 9 #include <iostream> 10 #include <sstream> 11 #include <fstream> 12 #include <iomanip> 13 #include 阅读全文
posted @ 2011-03-05 22:34 AC2012 阅读(221) 评论(0) 推荐(0)
摘要:1 /* 2 最小路径覆盖问题 3 */ 4 5 // include file 6 #include <cstdio> 7 #include <cstdlib> 8 #include <cstring> 9 #include <cmath> 10 #include <cctype> 11 #include <ctime> 12 13 #include <iostream> 14 #include <sstream> 15 #include <fstream> 16 #include & 阅读全文
posted @ 2011-03-05 17:17 AC2012 阅读(396) 评论(0) 推荐(0)
摘要:1 /* 2 最小路径覆盖 3 4 每个垃圾是个顶点 5 */ 6 7 // include file 8 #include <cstdio> 9 #include <cstdlib> 10 #include <cstring> 11 #include <cmath> 12 #include <cctype> 13 #include <ctime> 14 15 #include <iostream> 16 #include <sstream> 17 #include <fstream> 阅读全文
posted @ 2011-03-05 16:14 AC2012 阅读(870) 评论(0) 推荐(0)
摘要:1 /* 2 这个题目和1422有区别,每个顶点可以有多于一条路径经过他 3 4 那么会出现一些问题 5 6 比如 5个顶点,1->2 2->3 4->2 2->5,很显然,如果用最小路径覆盖直接求,那么就大难就是3 7 原因是1->2 2->3,之后2不能在经过了,所以 4->2->5不能通过,故而4是一条路径,5也是一条路径,答案就是3了 8 9 然而如果正确解是 4->2->5也是可以通过的,为了通过2,可以先使用floyd算法把所有的两个能连接的点都画上线。这样以后再匹配的时候, 10 就可以绕过已经匹配过得点了。默认已经可以 阅读全文
posted @ 2011-03-05 15:37 AC2012 阅读(513) 评论(0) 推荐(0)
摘要:1 /* 2 求最小的路径覆盖 3 4 最小路径覆盖在数值上和 最大独立集是等价的 5 6 最小路径覆盖(二分图) = N - 最大匹配 7 8 在这题中,将每个十字路口拆成两点1' 1'' 9 10 这样如果有两个十字路口之间有路 那么 1' -> 2''之间画线 11 12 这样就构成了一个二分图。现在题目要求,最小路径覆盖个数 13 14 如果没有连线,那么最大匹配就是0,则每个点都需要伞兵啦 15 16 如果有一个连线,那么最大匹配是1,则少用一个伞兵 17 18 同理,没增加一个匹配,则少一个伞兵,所以这样就容易理解了最小的路径覆 阅读全文
posted @ 2011-03-05 14:33 AC2012 阅读(754) 评论(0) 推荐(0)
摘要:1 /* 2 这个题目有点意思 3 4 构图需分析,和3041有区别 5 6 3041,是一行可以覆盖。所以在那个题目中,每行和列可作为顶点 7 8 现在的题目,是每段可覆盖,所以每个段作为顶点,如果交叉则有边。 9 10 这样图就构成了 11 */ 12 13 // include file 14 #include <cstdio> 15 #include <cstdlib> 16 #include <cstring> 17 #include <cmath> 18 #include <cctype> 19 #include < 阅读全文
posted @ 2011-03-04 21:39 AC2012 阅读(1353) 评论(0) 推荐(0)
摘要:1 /* 2 建图,然后二分匹配。求最小点覆盖转化为求最大匹配 3 hungarian算法 4 */ 5 // include file 6 #include <cstdio> 7 #include <cstdlib> 8 #include <cstring> 9 #include <cmath> 10 #include <cctype> 11 #include <ctime> 12 13 #include <iostream> 14 #include <sstream> 15 #include & 阅读全文
posted @ 2011-03-04 19:56 AC2012 阅读(269) 评论(0) 推荐(0)
摘要:1 /* 2 还有17个 3 4 求最小的顶点覆盖 ,也就是最大匹配,hungarian算法上 5 6 建图的时候,如果有一边是0,说明是开始状态,无须在算 7 */ 8 9 // include file 10 #include <cstdio> 11 #include <cstdlib> 12 #include <cstring> 13 #include <cmath> 14 #include <cctype> 15 #include <ctime> 16 17 #include <iostream> 18 阅读全文
posted @ 2011-03-04 15:57 AC2012 阅读(459) 评论(0) 推荐(0)
摘要:1 /* 2 要求的是最大独立集 3 4 最大独立集+最小顶点覆盖(最大匹配) = 顶点数 5 6 所以最后的结果为 (顶点数-最大匹配)/2 7 */ 8 9 // include file 10 #include <cstdio> 11 #include <cstdlib> 12 #include <cstring> 13 #include <cmath> 14 #include <cctype> 15 #include <ctime> 16 17 #include <iostream> 18 #inclu 阅读全文
posted @ 2011-03-04 15:10 AC2012 阅读(437) 评论(0) 推荐(0)
摘要:1 /* 2 找出最少的顶点把所有的边都覆盖了 3 最小顶点覆盖问题= 最大匹配问题 4 可hungarian算法来解决 5 采用邻接标 O(N*M) 6 */ 7 8 // include file 9 #include <cstdio> 10 #include <cstdlib> 11 #include <cstring> 12 #include <cmath> 13 #include <cctype> 14 #include <ctime> 15 16 #include <iostream> 17 #in 阅读全文
posted @ 2011-03-04 14:29 AC2012 阅读(312) 评论(0) 推荐(0)
摘要:1 /* 2 最大独立集+顶点最小覆盖(最大匹配)=顶点数 3 4 问题的本质回归为 求二分图的最大匹配了 5 6 二分图的最大匹配,可以用hungarian algorithm或者最大流算法来求 7 */ 8 9 // include file 10 #include <cstdio> 11 #include <cstdlib> 12 #include <cstring> 13 #include <cmath> 14 #include <cctype> 15 #include <ctime> 16 17 #include 阅读全文
posted @ 2011-03-04 14:05 AC2012 阅读(581) 评论(0) 推荐(0)
摘要:1 /* 2 可以用SPFA,把交易区间M内的点拿出来枚举一下就可以了 3 巧妙的构图,把每一个物品的原始价格转变为一条额外的边,可以转化为最短路问题了 4 */ 5 6 // include file 7 #include <cstdio> 8 #include <cstdlib> 9 #include <cstring> 10 #include <cmath> 11 #include <cctype> 12 #include <ctime> 13 14 #include <iostream> 15 #inc 阅读全文
posted @ 2011-03-03 19:51 AC2012 阅读(373) 评论(0) 推荐(0)
摘要:1 /* 2 图论 3 最短路 4 SPFA算法 5 6 从1到各点的最短距离,个点到1的最短距离,总共1000000点,1000000边 7 8 两次SPFA可以解决问题 9 */ 10 11 // include file 12 #include <cstdio> 13 #include <cstdlib> 14 #include <cstring> 15 #include <cmath> 16 #include <cctype> 17 #include <ctime> 18 19 #include <iostr 阅读全文
posted @ 2011-03-03 18:56 AC2012 阅读(598) 评论(0) 推荐(0)
摘要:1 /* 2 判断是否存在正环 3 居然还有同种货币的兑换,此点很。。。 4 */ 5 6 // include file 7 #include <cstdio> 8 #include <cstdlib> 9 #include <cstring> 10 #include <cmath> 11 #include <cctype> 12 #include <ctime> 13 14 #include <iostream> 15 #include <sstream> 16 #include <fst 阅读全文
posted @ 2011-03-03 14:53 AC2012 阅读(241) 评论(0) 推荐(0)
摘要:1 /* 2 bellman_ford算法 3 */ 4 5 // include file 6 #include <cstdio> 7 #include <cstdlib> 8 #include <cstring> 9 #include <cmath> 10 #include <cctype> 11 #include <ctime> 12 13 #include <iostream> 14 #include <sstream> 15 #include <fstream> 16 #inc 阅读全文
posted @ 2011-03-03 14:11 AC2012 阅读(499) 评论(0) 推荐(0)
摘要:1 /* 2 又一个bellman ford算法 3 */ 4 5 // include file 6 #include <cstdio> 7 #include <cstdlib> 8 #include <cstring> 9 #include <cmath> 10 #include <cctype> 11 #include <ctime> 12 13 #include <iostream> 14 #include <sstream> 15 #include <fstream> 16 # 阅读全文
posted @ 2011-03-03 00:28 AC2012 阅读(491) 评论(0) 推荐(0)
摘要:1 /* 2 bellman_ford算法 3 4 松弛操作稍微做点修改,就可判断是否存在正环了。 5 6 或者执行过程中,有大于V的也可输出 7 */ 8 // include file 9 #include <cstdio> 10 #include <cstdlib> 11 #include <cstring> 12 #include <cmath> 13 #include <cctype> 14 #include <ctime> 15 16 #include <iostream> 17 #include 阅读全文
posted @ 2011-03-03 00:01 AC2012 阅读(314) 评论(0) 推荐(0)
摘要:1 /* 2 01分数规划 3 分数规划 4 Dinkelbach算法 5 6 sigma(点权)/sigma(边权) <= lamda 7 8 sigma(F)/sigma(T) <= lamda 9 10 L = sigma(点) - lamda*sigma(边); 11 12 最终是个环 13 14 SPFA可以快速的检测是否存在负环,也就是说lamda值是否可行 15 16 此题和2728非常的类似,自己实现queue速度会快点 17 */ 18 19 20 // include file 21 #include <cstdio> 22 #include < 阅读全文
posted @ 2011-03-02 21:23 AC2012 阅读(1381) 评论(0) 推荐(0)
摘要:1 /* 2 此题和3757一样都用到了分数规划。 3 做了这两个题之后,感觉这样的问题一般是找个比率的最小值, 4 然后转化为目标函数的形式,然后在通过某种方法或者排序或者最小生成树 5 等等来找最小的解 6 7 8 任何两点之间都可连线,然后找出一个最小生成树 9 01二分规划 10 最优比率生成树 11 二分 12 迭代 13 Dinkelbach算法 14 15 sigma(cost[i])/sigma(len[i]) >= lamda 16 17 L = sigma(cost[i]) - lamda*sigma(len[i]). 01分数规划,可二分解和dinkelbach算法 阅读全文
posted @ 2011-03-02 19:37 AC2012 阅读(310) 评论(0) 推荐(0)
摘要:1 /* 2 N K F 3 4 pi bi ci 5 6 ti = Fi/pi + Fi/bi = Fi*( (pi+bi)/(pi*bi) ); 7 vi = (pi*bi)/(pi+bi); 8 这是Fi文件量,机器i需要的传输时间和速度 9 10 要求F分给K台机器,最终用时t 11 对于选中的服务器,速度为vi = fi/t = (pi*bi)/(pi+bi); 12 sigma(vi) = sigma(fi)/t; 13 t = sigma(fi)/sigma(vi) 14 t = F/sigma(vi); 15 16 要求花费最小,每个被选中的服务器的花费为 fi*ci = t. 阅读全文
posted @ 2011-03-02 14:30 AC2012 阅读(614) 评论(0) 推荐(0)
摘要:1 /* 2 模拟,简单 3 */ 4 // include file 5 #include <cstdio> 6 #include <cstdlib> 7 #include <cstring> 8 #include <cmath> 9 #include <cctype> 10 #include <ctime> 11 12 #include <iostream> 13 #include <sstream> 14 #include <fstream> 15 #include <iom 阅读全文
posted @ 2011-03-02 09:01 AC2012 阅读(258) 评论(0) 推荐(0)
摘要:1 /* 2 模拟,读懂题 3 */ 4 // include file 5 #include <cstdio> 6 #include <cstdlib> 7 #include <cstring> 8 #include <cmath> 9 #include <cctype> 10 #include <ctime> 11 12 #include <iostream> 13 #include <sstream> 14 #include <fstream> 15 #include <io 阅读全文
posted @ 2011-03-02 00:45 AC2012 阅读(513) 评论(0) 推荐(0)
摘要:/*2SAT,找出一组解同3648注意一点的是,在最后输入答案的时候犯了很多错误。最后只输出颜色为1的点如果没有目标点的话,就在下行找颜色为1的点像3648,需要找和新娘颜色一样的点,新娘的颜色一定为1,但是其在上行,所以在上行中找颜色为1的点*/// include file#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <cctype>#include <ctime>#include <iostream&g 阅读全文
posted @ 2011-03-01 21:41 AC2012 阅读(149) 评论(0) 推荐(0)
摘要:/*2SAT,找出一组解逆缩图序,拓扑排序,然后染色。找出和新娘颜色相同的点*/// include file#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <cctype>#include <ctime>#include <iostream>#include <sstream>#include <fstream>#include <iomanip>#include & 阅读全文
posted @ 2011-03-01 16:13 AC2012 阅读(267) 评论(0) 推荐(0)
摘要:/*2SAT验证型题目,需要建图,2分加速此种类型题目重在建图*/// include file#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <cctype>#include <ctime>#include <iostream>#include <sstream>#include <fstream>#include <iomanip>#include <bits 阅读全文
posted @ 2011-03-01 11:09 AC2012 阅读(230) 评论(0) 推荐(0)