E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
Pku
pku
3411 Paid Roads 搜索 + 剪枝
Paid Roads 题很简单,但是需要些剪枝技巧,我的做法是,先不管Pi,直接用dijkstra,求得1到N的最短距离,作为搜索上界或次优解,再用深搜,对边搜索,求得最优解,刚开始没有求上界的时候TLE,加了以后0ms AC。看来剪枝很重要。 代码 1 /* 搜索 + 剪枝,有的边可能经过两次 */ 2
·
2015-11-03 22:46
pku
pku
2125 最小割建模 + dfs 查找割边
Destroying The Graph 题目大意:给定一个图,给每个顶点两个操作:删除顶点 i 的所有入边,需要花费W+,删除顶点 i 的所有出边,需要花费W-,现有一个图,可能含有圈和重边,问:删除所有的边,需要的最小花费,并输出操作过程。 分析:既然删除出边和删除入边花费不一样,就可以拆点,对任意一点 u 拆成 u 和 u' 两个点,u 负责入边,u' 负责出边,u 和 u'之间无边相连
·
2015-11-03 22:40
DFS
pku
1815 最小割点集 => 拆点 + 最小割
Friendship 这题求得是点连通度,或最小割点集。删除这个集合,S到T就不连通,删除这个集合的任意真子集,S到T仍然有路可走。 做法是拆点,将每个人p拆成两个点p和p',令p' = p + N, 建边<p', p, 1>,1为容量,其余的,如果A有B的号码,建边<A,B',INF>,最后求出S到T'的最大流即可(不同的建边情况不同,这里是S到T')。 还有一难点
·
2015-11-03 22:39
pku
pku
3352 (边)双连通分量
Road Construction 题目大意:在一个小岛上,有n个景点,r条道路,经常由于有的路需要修理,影响了旅客的观光。问:如果修理任意一条路的时候都不影响任意两个景点的连通,至少还需要多少条路。 分析:以景点为节点,道路为边,建图后,去掉任何一条边,都不影响整体的连通性,说明此图的连通度 >= 2,正好是双连通的性质,如果去掉某条边,图的连通分支增加了,则这条边称为桥,这道题就可以
·
2015-11-03 22:38
pku
pku
1236 2186 2553强连通分支及其缩点(Tarjan算法)
pku
1236 Networ
·
2015-11-03 22:35
tar
pku
3469 最大流(dinic)
Dual Core CPU 这题建图方式:第一核做源点(S = 0),第二核做汇点(T = N +1),每个模块的双核花费<Ai, Bi>,加边<S, i, Ai>, <i, T, Bi>,如果不在同一核上操作,虚假额外花费,即加双向容量,加边<a, b, w>, <b, a, w>。剩下的就是实现方法了,我这里用dinic来实现的。
·
2015-11-03 22:33
dinic
最大流 EK dinic sap
pku
3281 Dining 题目分析:有N头牛,F种食物,D种饮料,要求给每头牛分配一份食物和一种饮料,每种食物和每种饮料只能供一头牛享用,问最多能满足多少头牛的需要。
·
2015-11-03 22:33
dinic
pku
1149 最大流(EK算法)
PIGS 用EK就能做。 盗用大牛讲解: 题目大意: 有 M 个猪圈(M ≤ 1000),每个猪圈里初始时有若干头猪。 一开始所有猪圈都是关闭的。 依次来了 N 个顾客(N ≤ 100),每个顾客分别会打开指定的几个猪圈,从中买若干头猪。 每个顾客分别都有他能够买的数量的上限。 每个顾客走后,他打开的那些猪圈中的猪,都可以被任意地调换到其它开着的猪圈里,然后所有猪圈重新关上
·
2015-11-03 22:32
pku
pku
1201 差分约束系统
Intervals 这题依然 SPFA + 栈 过! 不同的是,这题有隐含条件,而且所求也大不一样。 由于这是对区间操作,求至少包含区间[ai, bi]中ci个点的最小集合。可以用集合元素个数来定义变量,即num[bi] - num[ai] >= ci, 但有个隐含条件就是,每个元素都是整点,取得话,最多为一,最少为0, 即 num[i+1] - num[i] <= 1, num
·
2015-11-03 22:31
差分约束
pku
3169 差分约束系统
Layout 这题还是用的 SPFA + 栈 过的,400多ms,写得多了,发现都可以套用模块了,除了输入不太一样外,其他的都基本一样。 模块一:负责各个数组的初始化 模块二:负责加边,对边用邻接表处理 模块三:SPFA 用栈来实现的过程 代码 #include < stdio.h > #include
·
2015-11-03 22:30
差分约束
pku
1275 差分约束
Cashier Employment 由于数据量小,用Bellman_Ford就能过,而且不用要源点。 这道差分约束题困了我好久,WA了好多次,主要是不理解题意,在那乱写,后来WA之后,看别人解题报告,又是狂改,最后还是没能过!今天早上,在真正理解之后,把需要修改地方给删了,又重写了一下,终于找到错误了,原来边数赋值错了。discuss里说的n = 4的情况是误导大家的,其实是少写了个条件,题
·
2015-11-03 22:30
差分约束
pku
2983 差分约束系统(SPFA + 栈)
Is the Information Reliable? 分析题意: 输入有两种形式: 1:P A B X 即 B + X = A 转化一下: B - A <= -X, A - B <= X 构造边和权:(A, B, -X), (B, A, X) 2:V A B 即 B +1<= A 转化
·
2015-11-03 22:29
SPFA
pku
3159 差分约束系统(SPFA + 栈)
Candies 小孩A认为小孩B比自己多出的最多不会超过c个糖果,也就是 B - A <= c,正好符合差分约束方程,就是A到B的边权w(A, B) = c;用 SPFA + 栈 能过。 这里有两种加边方式: 第一种:我以前用的,用这个超时了,因为每次加边都是将边夹在邻接表的最后面,需要一个查找时间,这题数据量大,自然就超时了。 代码 void
·
2015-11-03 22:28
SPFA
pku
1364 差分约束系统
King 已知一个序列a[1], a[2], ......, a[n],给出它的若干子序列以及对该子序列的约束条件,例如a[si], a[si+1], a[si+2], ......, a[si+ni],且a[si]+a[si+1]+a[si+2]+......+a[si+ni] < or > ki。问题关键在于如何转化约束条件,开始我想以序列中的每一个值做一个点,如a[1], a[
·
2015-11-03 22:27
差分约束
pku
2777 线段树 (位运算加速)
Count Color 有三个关键点,前两个和hdu1698一样 key1:记得将区间覆盖值置0时,将区间值赋给它的两个子区间 key2:当前区间cover不为0,即可return key3:数据比较小,用位运算或操作,进行集合合并,加速过程。 代码 #include < stdio.h >
·
2015-11-03 22:25
位运算
pku
2528 线段树(离散化)
开始初始化线段树,每次更新,就是新插入个区间,二分查找,找到两个端点对应下标,对他们进行区间修改,剩下处理部分与
pku
2777相似,就不多说了,而且2777那题可以不用位运
·
2015-11-03 22:25
线段树
pku
3468 线段树 区间求和
A Simple Problem with Integers 又一道线段树,与前两道差异比较大,每次update操作中,是将一段区间的每一个值都加上某一个值,而不是简单的覆盖。 struct node{ int l, r, cover; __int64 sum; __int64 key;}st[NN * 8 ];
·
2015-11-03 22:24
线段树
pku
1182 并查集 (偏移量处理)
题目链接:食物链 中文题目,题意很好理解。类似于poj2492 A Bug's Life 在这里动物只有3种A,B,C,如果A吃B,我们可以将A对B的偏移量定为1。这题关键在于用一个数组记录每个点相对于根节点的偏移量,在合并两个集合的时候,注意保持当前两个节点的偏移量差为1, 在路径压缩过程中,依然采用递归形式,将路径上的偏移量层层改变,如果A和B偏移量之差为1, A吃B;如果为0
·
2015-11-03 22:22
并查集
pku
1611 并查集
题目链接:The Suspects 很简单的一道并查集,关键在如果保存每个集合的元素个数和如何合并处理。 值得学习的一点:把当前集合的元素个数存在根节点上,每次合并的时候,对根节点进行操作即可。 应用归类:集合合并,判断两点是不是在同一个集合,查找某一个集合上的元素个数等。 代码 #include < stdio.h
·
2015-11-03 22:19
并查集
pku
2492 并查集
题目链接:A Bug's Life 分析:很经典的一道并查集,这题关键在如何维护每一个点到集合顶点的偏移量。第一次了解偏移量,还是挺有收获的!对于两个点x,y,分别找到他们的根节点fx,fy。(fx = find(x); fy = find(y);)如果fx == fy 则找到一对同性恋者,return,否者:bin[fx] = fy; fx指向fy,为了保证x和y为异性,即相对根节点
·
2015-11-03 22:19
并查集
pku
1511 最短路(SPFA)
题目链接:Invitation Cards 分析:这是我写的第一道SPFA,没想到第一题,尽然以6000多ms的速度爬过,汗!而且加了邻接表优化,这一道题,教会我两个知识点,狂赞:好题!这题大意是:CCS有自愿者每天去各个站点宣传,让别人去看戏剧,要求这P个自愿者一个来回所需的最小花费。先求一次最短路,算出CCS到每个站点的最短距离,加起来,再将所有的边都反向一次,再计算一次CCS到每个站点的最
·
2015-11-03 22:18
SPFA
pku
1011 深搜+强剪枝
不过这题的剪枝很强,一般的剪枝都会超时,我不知道TLE了多少次,discuss里有组很BT的数据,就算拿我现在0msAC的代码跑,也需要将近3—4ms才能搞定,看来
pku
数据还是蛮弱的,不过我也
·
2015-11-03 22:17
pku
pku
3436 ACM Computer Factory 最大流
http://acm.
pku
.edu.cn/JudgeOnline/problem?
·
2015-11-03 22:15
factory
pku
1459 Power Network
http://acm.
pku
.edu.cn/JudgeOnline/problem?
·
2015-11-03 22:14
NetWork
Guessing Game解题报告 (
pku
2328)
Guessing Game Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6552 Accepted: 2275 Description Stan and Ollie are playing a guessing game.
·
2015-11-03 21:56
game
PKU
1258 Agri-Net
文章作者:ktyanny 文章来源:ktyanny 转载请注明,谢谢合作。 话说N久没做题了,手生……今天拿一道很水的最小生成树来做,很水的。理解题意后一看就是赤裸裸的最小生成树算法题。好吧,二话不多说,贴上我的代码: /* by ktyanny 2010.01.26
·
2015-11-02 19:48
net
POJ 图论、网络流入门题总结、汇总 收藏
POJ 2449 Remmarguts' Date(中等) http://acm.
pku
.edu.cn/JudgeOnline/problem?
·
2015-11-02 18:42
poj
POJ图论
一、最短路 POJ 2449 Remmarguts' Date(中等) http://acm.
pku
.edu.cn/JudgeOnline/problem?
·
2015-11-02 18:04
poj
POJ1083 Moving Tables——heap+贪心——
pku
1083
最简单的区间贪心,但是考察细心。 注意事项: 1、考虑s>t的情况 2、读入的时候要把s、t分别转换为(s+1)div 2和(t+1)div 2 代码: Program poj1083;//By_Thispoet Const maxn=200; Var t,i,j,k,m,n :Longint; heap,l,r :Array[1..maxn
·
2015-11-02 17:39
table
POJ2774 Long Long Message——后缀数组——
pku
2774
参考罗穗骞神牛论文中求公共子串例题。 将两个字符串合并为一个,中间加上一个没有出现过的字符,我加上的是‘}’ 然后求出height数组,并判断该height数组是否合法,如果合法就采用它来更新答案。 也是后缀数组的模板题吧。 代码: Program poj2774;//By_Thispoet Const maxn=200005; Var i,j,k,m,n,p,q,sum,
·
2015-11-02 17:38
message
POJ1390 Blocks——动态规划——
pku
1390
经典的动态规划,LRJ神牛的书上经典例题第一题。 开一个三维数组,f[i][j][k]表示将i~j这一段,连上后面的k个格子全部消去所能够获得的最大价值。 状态转移方程: f[i][j][k]=Max{ Max{f[i][p][len[j]+k]+f[p+1][j-1][0]}(color[p]=color[j] and i<p<j)//和前面某段一起消掉
·
2015-11-02 17:37
block
POJ2018 Best Cow Fences——二分答案+贪心(动态规划)求最大子段和——
pku
2018
可以转换成二分答案求最大连续子段和来做。 每次在a[i]的基础上减去二分出来的答案。 求出长度不小于f的最大连续子段和。如果大于0,则调整下边界,否则调整上边界。 求长度不小于f的最大连续子段和需要一些小技巧,比如说判断以i为终点的连续子段和,就可以看sum[i]-sum[i-f]+dp[i-f]的正负。其中dp[i]表以i为终点的最大连续子段和。具体见代码。 Program cowfn
·
2015-11-02 17:37
动态规划
POJ2104 K-th Number——划分树——
pku
2104
按照铎铎大牛的AC Record做的第一题,就被虐得很惨。 这是划分树的模板题。划分树,主要是求无更改的情况下区间第k小值。建树和线段树有些类似,但是划分树是在排序的基础上,左子树记录比中间值小的值,右子树记录比中间值大的数,在每棵子树中不改变原数列中的顺序。 查找也类似线段树,规定查找区间,定义函数Find(code,l,r,kth,dep),code为当前查找到的节点值,l,r是区间左右界
·
2015-11-02 17:36
number
POJ2195 Going Home——二分图最大带权匹配的KM算法——
pku
2195
KM算法模板题。 友情链接:百度百科KM算法:http://bk.baidu.com/view/739278.htm 注意事项: 1、在每次Dfs做匈牙利算法的时候都要将可更新值slack赋为无穷大 2、在扩大相等子图的时候注意要将不在交错树中的y节点的slack值减去更新值d 3、百度百科上给的程序复杂度为O(n^4),我的代码时间复杂度是O(n^3) 代码: Program K
·
2015-11-02 17:35
home
POJ1276 Cash Machine——背包+优化——
pku
1276
嗯,今天上午ywt命令我写二进制压位背包,于是今天下午犯了一下午的sx,然后终于做出来了。布尔型背包压位存储不会写,拿来练手。WA了N次,然后写不加优化的,还是WA,最后发现自己把二进制拆分边界条件写错了……看完lyd的题解,发现还有一种不用单调队列、不用压位、但是空间花销比较大的简单算法,贴个传送门吧:http://poj.org/showmessage?message_id=156751 我
·
2015-11-02 17:34
mac
POJ3267 The Cow Lexicon——动态规划——
pku
3267
简单的动态规划。状态转移方程: f[i]=Min{f[i-1]+1,Make(i)} 其中Make为自定义函数:表示取了i这个位置上的字符之后前面至少要删掉多少个才能满足条件。 代码如下: Program Lexicon;//By_Thispoet Const maxn=300; Var i,j,k,m,n :Longint; f :Array[0..ma
·
2015-11-02 17:33
动态规划
POJ3260 The Fewest Coins ——完全背包+多重背包——
Pku
3260
只需要对John的付款数做一次多重背包,对shopkeeper的找零钱数做一次完全背包即可。 最重要的是上界的处理。可以注意到,John的付款数最多为maxv*maxv+m,也就是24400元。同理,shopkeeper找钱最多的数目为maxv*maxv. 证明如下: 如果John的付款数大于了maxv*maxv+m,即付硬币的数目大于了maxv,根据鸽笼原理,至少有两个的和对maxv取模的
·
2015-11-02 17:31
poj
POJ3265 Problem Solving ——动态规划——
Pku
3265
比较巧妙的动态规划。用f[i][j]表示第i个月,总工作了j道题目(从1~j),所能剩余的最多钱数。 状态转移方程如下: f[i][j]=Max(m-∑b[j]-∑b[k]){其中,k应当满足f[i-1][k]>=∑a[j]-∑a[k]} 注意最后输出的应该是ans+1,因为第一个月实际上是没有收入的。 代码: Program Psolve;//By_Thispoet Cons
·
2015-11-02 17:30
动态规划
POJ2976 Dropping tests——01分数规划——
Pku
2976
什么是01分数规划: 给出n个分数ai/bi,选出m个(m<=n)使得∑(ai)/∑(bi){其中i是被选出的分数编号}达到最大值。 01 分数规划的两种方法: 1、二分法 二分一个答案k,令ci=ai-k*bi,并将ci排序,选出最大的m个,如果∑(ci){1<=i<=m}>=0,那么提高答案k的下界,否则降低上界,直到k的精度满足要求为止。 2
·
2015-11-02 17:29
test
POJ3101 Astronomy——高精度+分解质因子法求GCD和LCM——
Pku
3101
经典的求分数GCD和LCM的题目。方法:分别求出每个行星对于第一颗行星的相对速度,设其为ai/bi,那么答案就是乘上的一个最小的分数使得所有ai/bi与它相乘之后都为整数。那么这个分数就是: (所有bi的LCM) -------------- (所有ai的GCD) 用分解质因子的方法就可以求出这个分数了。注意要用高精度。 代码如下: Program Astronomy;//By_Th
·
2015-11-02 17:29
poj
POJ2407 Relatives——欧拉函数——
Pku
2407
此题是学习欧拉函数必做的模板题。 介绍一下欧拉函数: 设n为正整数,欧拉函数φ(n)定义为不超过n且与n互质的正整数的个数。 三个引理: 1、对于某一素数p,则φ(p)=p-1 2、对于某一素数p的幂次p^a,φ(p^a)=(p-1)*p^(a-1) 3、对于某一合数n可分解为两个素数之积a*b,则φ(n)=φ(a)*φ(b) 证明: 1、显然 2、对于p^a-1个比p^a小的数
·
2015-11-02 17:28
relative
POJ3250 Bad Hair Day——单调栈——
Pku
3250
维护一个单调栈,栈中元素单调递减。 同时记录一个num数组,表示的是栈中这个点能够看到的牛的数量+1(它本身) 插入元素a[i]时,一直dec(stack_size)直到stack[stack_size]>=a[i],同时temp记录扫过的num[i]之和, 在ans的值上加上temp值 如果stack[stack_size]=a[i],那么就在num[stack_size]上加上t
·
2015-11-02 17:27
AIR
POJ3253 Fence Repair ——贪心(Huffman树的构造)+堆——
Pku
3253
思想与合并果子相同。逆序地来想,显然这些板子必须一共切割n-1次,如何恰当的分配这n-1次切割就是关键所在。这里就用到了构造Huffman树的贪心思想。 即每次从待合并序列中取两个最小的值,将它们合并成一个较大的,然后把这个较大的在加入进待合并的序列当中,直到待合并序列中只有一个元素。而不加任何优化时复杂度为O(n^2),难以承受。 可以用堆将复杂度优化到O(nlogn),就完全可以接受了。
·
2015-11-02 17:26
Huffman
POJ3251 Big Square——搜索+强力剪枝——
Pku
3251
O(n^4)+强力剪枝优化无压力,不用二分图匹配的麻烦构图。 搜索策略: 枚举对角线——因为只有枚举对角线才能保证正方形唯一。 剪枝: 1、对于每个是'J'的点,枚举出它非严格下方的所有'J'点,不用全部枚举N^4次 2、对于每条对角线,计算出其中点tx、ty坐标与两个端点x、y坐标的差值x1,y1,x2,y2,如果tx+y1或ty+x2不是整数就判断下一个。 判断条件: 对于每条合
·
2015-11-02 17:26
poj
POJ3189 Steady Cow Assignment ——二分答案+二分图多重匹配——
Pku
3189
改进过后的匈牙利算法即可轻松秒掉最大流的各种NB算法。不过,这种方法有一个局限,就是右边集合可以匹配多个而左边集合只能匹配一个的时候才可以用,否则只能搞神马SAP等等了。 匈牙利算法的改进: 1、存储右边集合的结果时不要只存一个,而是将所有匹配结果都存下来。 2、在找增广路时,把(res[k]=0)的条件改成(res[k,0]<max[k]) CODE Program Stead
·
2015-11-02 17:25
sign
POJ1465 Multiple——Bfs+余数判重——
Pku
1465
这道题精在判重优化。因为如果存在两个数A、B,且满足A mod n=B mod n=C,那么,这两种情况可以看做是重复的,保留较小数即可。具体优化,开一个布尔数组即可。 特别需要注意一点:如果n=0,那么应当输出0!!!{本弱就因为这个WA了半天,看Discuss才明白的……} CODE Program Multiple;//By_Thispoet Const maxn=20000;
·
2015-11-02 17:24
poj
POJ3167 Cow Patterns ——有趣的KMP算法——
Pku
3167
这道题还是很有意思的。题目大意如下: 给定一个模式串,如果在主串中存在这样一个子串:子串长度与模式串长度相同,且子串中各个数字的大、小、同关系和模式串中的大、小、同关系是一样的,就称该子串满足条件。 比如说模式串:1,4,4,2,3,1 而主串:5,6,2,10,10,7,3,2,9 那么主串第三位开始的2,10,10,7,3,2就是满足条件的 具体的算法很巧妙:我们对于每一个模式串中的数
·
2015-11-02 17:22
Pattern
POJ3461 Oulipo ——KMP算法——
Pku
3461
建议大家学一学比较巧妙的KMP算法吧,很有意思。推荐个题目:POJ3167 Cow Patterns 题解我会发在本博里。 这个KMP就木有什么好说的了吧,大家找百度百科学一下就可以了~ CODE Program KMP;//By_Thispoet Const maxn=1000005; Var st,s :Ansistring;//st is long and s
·
2015-11-02 17:21
poj
POJ1325 Machine Schedule ——二分图最小覆盖——
Pku
1325
二分图最小覆盖:找到一个点集,使得每条边上至少有一个点在该集合中。 证明二分图最小覆盖=二分图最大匹配: 二分图最大匹配后,每个点都不能找到增广路,而找不到增广路的原因就是至少有一个点已经被匹配了。即这个点在二分图的最大匹配中。而二分图最大匹配中会存在同一条边两个点都在这个点集中的情况,我们只要取一个点即可。 本题当中,将机器A上的模式看作X集合,机器B上的模式看作Y集合,每
·
2015-11-02 17:21
schedule
POJ1151 Atlantis ——离散优化——
Pku
1151
分别将x、y坐标排序之后统计有效小矩形即可。这类题目也可以加上线段树优化,可是这道题的数据范围仅仅为n<=100,是可以不用线段树的,直接统计也能AC. CODE Program Atlantis;//By_Thispoet Const maxn=300; Var i,j,k,m,n,p,q :Longint; ans :Extended;
·
2015-11-02 17:20
ant
上一页
36
37
38
39
40
41
42
43
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他