09 2015 档案

摘要:题意:F块草坪,上面有n头牛,可以容纳m个牛遮雨。将草坪一份为2,成为二部图。 对于此题,和poj2112很像,只是2112很明显的二部图。这道题就开始敲,但是建图遇到问题,草坪的2个值怎么处理,于是将1个草坪分成2分,一份与源点相连,值为牛的个数, 另一份与汇点相连表示可以留下多少牛,由于是一个草 阅读全文
posted @ 2015-09-25 00:06 sweat123 阅读(195) 评论(0) 推荐(0)
摘要:多源多汇。 比较明显的建图。对于电器,可以从源点与各个电器相连,容量为1,表示这个电器有1个,然后对于各种接头,那可以各个接头与汇点相连,容量为1,表示每个接头只能用一次。 然后对于能够相互转换的接头,其容量为无穷,文中写到转换器可以无穷使用。然后对于电器和其使用的接头,相连,容量为1表示该电器使用 阅读全文
posted @ 2015-09-24 15:35 sweat123 阅读(242) 评论(0) 推荐(0)
摘要:我用Dinic写的。G++ 1800ms 很慢,c++直接超时。优化后的 141ms,很快! 对于此题,建图方法很巧妙,通常想到求距离,那就会朝距离的方向建图,但是这题根据牛个数来建图,然后二分距离。 先求出任意点之间的最短距离。对于挤奶器,牛,很明显的分为2部分。挤奶器的牛来自牛这部分。先另外设源 阅读全文
posted @ 2015-09-23 23:46 sweat123 阅读(149) 评论(0) 推荐(0)
摘要:#include #include #include #define MAXN 1010 using namespace std; int map[MAXN][MAXN],n,dis[MAXN]; int min(int x,int y) {return xq; memset(dis,-1,sizeof(dis)); dis[1]=0; q.push(1); wh... 阅读全文
posted @ 2015-09-21 19:43 sweat123 阅读(311) 评论(0) 推荐(0)
摘要:Dinic算法: 层次图:根据源点到该点的距离建图,这里设相邻的都差1。 (下面部分转) 在这幅图中我们首先要增广1->2->4->6,这时可以获得一个容量为2的流,但是如果不建立4->2反向弧的话,则无法进一步增广,最终答案为2,显然是不对的,然而如果建立了反向弧4->2,则第二次能进行1->3- 阅读全文
posted @ 2015-09-21 13:07 sweat123 阅读(287) 评论(0) 推荐(0)
摘要:RMQ即求区间(i,j)的最值。通过O(nlogn)处理,O(1)给出答案。 RMQ主要是动态规划来做。dp[i][j]表示从i开始的长为2^j的区间最值。 那么可以得到dp[i][j]=max(dp[i][j-1],dp[i+(1<<(j-1))][j-1]); dp[i][j],这个区间可以分为 阅读全文
posted @ 2015-09-17 23:04 sweat123 阅读(253) 评论(0) 推荐(0)
摘要:对于每次询问的大的值,都是从小的值开始的,那就从小到大处理,省去很多时间,并且秩序遍历一遍m; 这题cin容易超时,scanf明显快很多很多。G++又比C++快; 阅读全文
posted @ 2015-09-16 16:30 sweat123 阅读(160) 评论(0) 推荐(0)
摘要:优先队列做,然后遍历人数。 阅读全文
posted @ 2015-09-16 10:28 sweat123 阅读(130) 评论(0) 推荐(0)
摘要:先dfs对度小于2的删边,知道不能删为止。 然后通过并查集来计算每一个分量里面几个元素。 阅读全文
posted @ 2015-09-14 22:59 sweat123 阅读(154) 评论(0) 推荐(0)
摘要:可以暴力。 阅读全文
posted @ 2015-09-14 19:48 sweat123 阅读(159) 评论(0) 推荐(0)
摘要:#include #include #define lson l,m,rty?x:y; } void PushUp(int rt) { sum[rt]=max(sum[rt=r) { return sum[rt]; } int ret=-9999999; int m=(l + r)/2; if(m = R) { ... 阅读全文
posted @ 2015-09-14 19:20 sweat123 阅读(102) 评论(0) 推荐(0)
摘要:wa从一点到晚上11点没停过,也不知道为什么错,第二天换了个思路做,终于过了。这题还是有点问题的,数据有点水,我看到有人贴的代码baabbaab这组数据是4 0,明显错的,但是却可以过。 下面的是我第一次写的代码,也不知道到底哪里错了,能想到的样例都过了。 正的直接后缀数组求出即可。反着的我还用he 阅读全文
posted @ 2015-09-14 13:07 sweat123 阅读(145) 评论(0) 推荐(0)
摘要:给定一个字符串,求不相同的子串的个数。 假如给字符串“ABA";排列的子串可能: A B A AB BA ABA 共3*(3+1)/2=6种; 后缀数组表示时: A ABA BA 对于A和AB height[i]=1; 表明一个长度公共,所以ABA中多出现了A这个子串,所以6-1=5; 对于ABA 阅读全文
posted @ 2015-09-12 13:56 sweat123 阅读(157) 评论(0) 推荐(0)
摘要:后缀数组多个字符串问题。 先求出height[]数组,然后二分求最大的长度。 但是条件需要改变。如果出现次数大于一般那就满足。然后就要解决如何判断那一段属于其中一个字符串。 所以先处理出长度。并且不断标记,如果在长度其中,将那个长度标记。那就不会出现自己与自己的相同情况了。 RE了很多次,字符串输入 阅读全文
posted @ 2015-09-10 21:59 sweat123 阅读(133) 评论(0) 推荐(0)
摘要:Milk Patterns Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 13669 Accepted: 6041 Case Time Limit: 2000MS Description Farmer John has noti 阅读全文
posted @ 2015-09-09 16:59 sweat123 阅读(226) 评论(0) 推荐(0)
摘要:题意:求字符串中不重叠的出现至少2次的子串个数。如aaaa 子串有a aa,2个。 普通的求出height[]数组,然后枚举所有的长度差。 对于"baba" i height[i] 串 1 0 a 2 1 aba 3 0 ba 4 2 baba 对于可能的k(满足的差),从1开始枚举。对于k=1时, 阅读全文
posted @ 2015-09-08 23:02 sweat123 阅读(222) 评论(0) 推荐(0)
摘要:比较简单的应用。 阅读全文
posted @ 2015-09-08 19:42 sweat123 阅读(306) 评论(0) 推荐(0)
摘要:对于重复子串问题,可分为可重叠和不可重叠2种。 1.给定一个字符串,求最长重复子串,这两个子串可以重叠。 这道题是后缀数组的一个简单应用。做法比较简单,只需要求 height 数组里的最大值即可。2.给定一个字符串,求最长重复子串,这两个子串不能重叠。 这题比上一题稍复杂一点。先二分答案,把题目变成 阅读全文
posted @ 2015-09-08 19:16 sweat123 阅读(142) 评论(0) 推荐(0)
摘要:刚开始学,只会照着模板。 最长公共连续子串。 阅读全文
posted @ 2015-09-06 10:21 sweat123 阅读(113) 评论(0) 推荐(0)