自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(238)
  • 收藏
  • 关注

原创 hdu 4791 长沙现场赛A题

题意:打印纸张,随着张数的增加,价格会降低,给出m个询问打印的张数,求最小的花费。思路:找到张数所在的区间,最大的花费就是该区间的价格*张数,如果要打印多余的张数,就在后面的区间找,因为后边的区间都是张数大于目标张数,所以去区间的最小值,应为价格是递减的,张数是递增的,所以要找区间的张数*价格的最小值,用线段树就可以。。。#include#includeconst in

2013-12-02 07:38:21 1591

原创 hdu 4801 长沙现场赛K题

题意:给出一个魔方的状态,求出在n次转动内最多可以成功多少个面。思路:现场赛时,wx翻译完题目我们就知道是深搜,wx说只需要转三个面。复杂度就是(2*3)^7.当时我想着可以优化一下,一个面沿一个方向转一次后,就不要沿另一个方向转,复杂度降到6*5^6,不优化时间跑了500ms多,优化一下156ms,,#include#includeint mian[6][4]

2013-12-02 00:45:59 1874

原创 hdu 4122 (线段树)

题意:月饼商店从2000年1月1日0时开始开m个小时,只能在整点的时候才能做月饼,给出每个时间点做一个月饼的费用,做月饼的时间不计,有n个订单,取货的日期和数量,商店有冷藏库,容量无限大,月饼的冷藏时间有限,冷藏是要花钱的,求出这n个订单总共最少得花多少钱。思路:对于每个订单ti都是在ti-t—ti时间段内找出做月饼花费最小时间点,可以先求出任意时间点做月饼满足最后一个订单的费用(不考虑冷藏时

2013-10-29 19:31:29 998

原创 hdu 3804(树链剖分+线段树)

题意:给出一棵树,Q个询问x,w,x到1的路径上不超过w的最长边是多少。思路:题目读完了就知道用熟练剖分处理,然后可以用线段树求,线段树学的不是很好,就问了lyf怎么处理数据,他说把所有的询问按照权值的大小排序,边的大小也按权值排序,然后对每个询问把小于等于该权值的边加到树上就可以了。#pragma comment(linker, "/S

2013-10-25 18:30:11 1011

原创 poj 3126 (最短路)

题意:更改四位数的门牌号(素数),每次只能改一个数字,问最少多少次能改到目标数字。思路:打表出四位的所有素数,然后建图,只有一个位数的数字不同的连边,跑最短路,,,#include#include#include#includeconst int N=10000;const int inf=0x3fffffff;using names

2013-10-23 19:36:24 807

原创 poj 3641&hdu 1905(伪素数判定)

题意:给出p,a问p是不是以a为底的伪素数,如果p不是素数判断,是否a^p%p==a#include #include #include #include #include #include #include typedef __int64 LL; LL a,b,sum; const int S

2013-10-23 19:31:10 965

原创 poj 2429 (分解质因子)

题意:给出两个数的最大公约数g,最小公倍数lcm,求出这两个数,有多种组合的,求出和最小的一组。思路:g=gca(a,b);a*b=lcm*g;a/g*b/g=lcm/g;gcd(a/g,b/g)=1;就是把lcm/g分解成两个互质的因子。可以用Pollard rho分解子因子,然后再将相同的因子合并,再将因子分成两部分。#include#includ

2013-10-23 14:51:32 1113

原创 poj 3237(树链剖分+线段树)

题意:给一棵树,三种操作。将第i条边的权值改为v,将a到b的路径上的边的权值全部取反,求a到b路径上边的权值的最大值。思路:明显的树链剖分,加上线段树的操作。因为有取反的操作所以每个区间要记录最大值和最小值。查询两点间的路径时,用求公共祖先的方式去求。#include#include#includeconst int N=101000;const

2013-10-13 19:27:45 984

原创 hdu 4712 (随机算法)

第一次听说随机算法,在给的n组数据间随机取两个组比较,当随机次数达到一定量时,答案就出来了。#include#include#include#define min(a,b) (a>b?b:a)int a[101000];int find(int b){ int ans=0; while(b) { if(b&1)ans++; b>>=1;

2013-10-09 17:53:53 1353

原创 hdu 4714 (树形dp)

题意:给一棵树,删除一条边和增加一条边代价都是1,问把所有节点连成环,最少的代价。思路:可以将树删成ans+1条链,答案就是ans+ans+1。如果一个节点的分支数大于1的话,就把该点与父节点的边删点,该节点形成的链数就是son-1。树的根节点注意,应为根节点可以有两个分支。#pragma comment(linker, "/STACK:1024

2013-10-09 17:34:34 1033

原创 hdu 3966 (树链剖分+线段树)

题意:给出一棵树,每个节点有一些敌人,有三种操作,I:x,y,路径上的所有点的人数+w。D:x,y,路径上的所有点的人数-w。Q:节点x的人数。思路:如果是线性的线段树可以做,所以要树链剖分,剖分后的每条链是线性的,更改区间时用找公共祖先的方式,将两点找到同一条链上,同一条链上的两点间可以直接线段树更改。#pragma comment(linke

2013-10-09 16:09:01 1524 2

原创 hud 4718 The LCIS on the Tree(树链剖分+线段树区间合并)

题意:给出一棵树,有Q个询问,x到y之间的路径所有边组成的序列,求该序列的LCIS。思路:hdu 3308的加强版。先进行树链剖分,树链剖分后建线段树,树链剖分后一条链上的点在线段树中编号是连续的,所以只能在线段树上查询一条链上的区间信息,所给的点肯定不全是在一条链上的,所以我们求出的是一些区间,而这些区间还要合并起来求最大LCIS,在树上操作的时候是从度数大的点向上求的,有一条路径求的是下降

2013-10-09 12:07:34 1341

原创 poj 3155 (最大密度子图)

题意:一个公司有n个人,给出了一些有冲突的人的对数(u,v),公司决定裁人,那么总裁现在要裁掉冲突率最高的那些人(冲突率=在这些人中存在的冲突数/人数)。就是求出一些点,这些点之间的边数/点数最大。最大密度子图。思路:胡伯涛的论文《最小割模型在信息学竞赛中的应用》介绍了两种方法:第一种:转换为最大权闭合图的模型来求解:设max g = f(x)= |E‘|/|V’| ,找一个子图的

2013-09-27 17:19:34 2048

原创 poj 1966 (最小割点集)

题意:一个网络的安全系数是最少删除几个点后使得剩下的图不连通,给出一个无向图,求出该网络的安全系数。思路:看了最小割模型论文,最小割点集就是把点分成两部分,一部分跟源点相连,一部分与汇点相连,这题就是求出最小割集,但是没有源点和汇点,要枚举。原图的每条边的流量为inf,因为经过一个点的流量为1,所以要拆点,i->i'的流量为1,求出最小的最大流就可以了。

2013-09-24 23:05:53 1613 1

原创 poj 3308 (最大流)

题意:n*m的地图,给出L个火星人登陆的坐标,要在火星人登陆地球的瞬间全部消灭他们,有一种激光枪,一次可以消灭一行(或一列),消灭一行(或一列)有不同的代价,总代价是所有激光枪的代价之积。思路:之前做过类似的题是求最少多少次能消灭,而最少的次数不一定是代价最小的,行跟列建立二分图,每个火星人就是一条边,就是选一些点覆盖所有的边,这些点的权值之积最小,如果是求和的话就是二分图的最小点权覆盖集了,

2013-09-24 23:05:38 1082

原创 poj 2446 (二分匹配)

题意;除了所给的一些点外,问能不能用1*2的矩形覆盖所有的点,矩形间不能重叠。思路:简单二分匹配,手速,,,,,,#include#includeconst int N=1200;int match[N],link[N],map[35][35],n,m;int dir[4][2]={0,1,0,-1,1,0,-1,0};int find

2013-09-24 21:37:38 739

原创 poj 3216 (最小路径覆盖)

题意:有n个地方,m个任务,每个任务给出地点,开始的时间和完成需要的时间,问最少派多少工人去可以完成所有的任务。给出任意两点直接到达需要的时间,-1代表不能到达。思路:很明显的最小路径覆盖问题,刚开始脑子抽了,没求最短路直接就做了,题目只给了两点间直接到达的时间,还可以间接到达,用floyd求出最短路。。。#include#includeco

2013-09-24 21:37:29 899

原创 poj 3352 (双联通缩点)

题意:给出一个无向联通图,求最少添加几条边让图是双联通图。思路:先Tarjan缩点,(求出度数为1的双联通分量的个数+1)/2;#include#includeconst int N=1100;int dep[N],dfs[N],low[N],ans,idx,head[N],num;struct edge{ int st,ed,nex

2013-09-24 10:06:27 876

原创 poj 2942 (点双联通+判断二分图)

题意:亚瑟王要在圆桌上召开骑士会议,为了不引发骑士之间的冲突,并且能够让会议的议题有令人满意的结果,每次开会前都              必须对出席会议的骑士有如下要求:           1:相互憎恨的两个骑士不能坐在直接相邻的2个位置;           2:出席会议的骑士数必须是奇数,这是为了让投票表决议题时都能有结果。          现在给定准备去开会的骑

2013-09-23 17:58:12 1160 1

原创 poj 2516 (费用流)

题意:有N个供应商,M个店主,K种物品。每个供应商对每种物品的的供应量已知,每个店主对每种物品的需求量的已知,从不同的供应商运送不同的货物到不同的店主手上需要不同的花费,又已知从供应商m送第k种货物的单位数量到店主n手上所需的单位花费。供应是否满足需求?如果满足,最小运费是多少?思路:这题一读完就知道是费用流了,刚开始想着拆点,不过算了一下,把m个供应商拆成m*k个点,n个店主拆成n*k个点,

2013-09-19 23:07:44 896

原创 poj 2186 (强连通缩点)

题意:有N只奶牛,奶牛有自己认为最受欢迎的奶牛。奶牛们的这种“认为”是单向可传递的,当A认为B最受欢迎(B不一定认为A最受欢迎),且B认为C最受欢迎时,A一定也认为C最受欢迎。现在给出M对这样的“认为...”的关系,问有多少只奶牛被除其本身以外的所有奶牛关注。思路:既然有单向传递关系,那么关系图可能就形成了环,一个环内的奶牛互相认为。如果把这些环用一个点代替的话,建反图,就成了一个有向无环图了

2013-09-19 23:06:38 924

原创 poj 3436 (最大流)

题意:每台电脑共有p种零件,现在有n台机器,给出n台机器每台需要的一些种类零件当原料(0代表不需要,1代表必须要,2代表              可有可无)和输出的产品零件。问怎么安排生产线使生产出来零件可以组装的电脑最多。思路:如果机器的原材料什么都不需要的话就可以当源点,如果机器输出的零件种类为p就可以当汇点。刚开始想复杂了(1 0 1 可            以同时跟1 0 0和0

2013-09-19 21:14:14 863

原创 poj 3020 (二分匹配)

题意:给出一些城市的坐标,每个信号基站可以覆盖两个相邻的点,问最少要建多少个基站。思路:我们要尽可能多的建立能覆盖两个城市的基站(二分匹配最大匹配),剩下的城市每个城市建立一个基站。先求出最大匹                配数k。n-k*2+k=n-k;#include#includeconst int N=500;int head[N],nu

2013-09-19 19:40:45 799

原创 poj 3041 (最大匹配)

题意:给出一些危险小行星的位置,一次能消灭一行或一列的小行星,为最少多少次能消灭完。思路:就是行跟列的最大匹配.#include#includeconst int N=510;int map[N][N],match[N],link[N],n;int find(int i){ int j; for(j=1;j<=n;j++) { if(map[

2013-09-18 21:24:26 917

原创 poj 1094 (拓扑排序)

题意:给出n个字母的一些大小关系,判断能否拓扑排序或者出现了矛盾,如果是这两种情况要求出到第几组关系时就可以得到。否            则就是所给数据不完全。思路:每读一组关系进行一次拓扑排序,如果排序成功或者出现矛盾记录第几组关系之后就不拓扑排序了,直接读完数据就行了。#include#include#includeconst int N=30;u

2013-09-18 21:19:05 839

原创 poj 1789 (最小生成树)

题意:给出n个卡车,每个卡车的类型是七个字符组成的,一种卡车可以从另一种卡车派生来的,代价是两种卡车间类型不同字符的个数,求出这n中卡车派生的最小代价,n种车有一 种是开始就有的,n-1种是派生出来的。思路:因为刚开始有一种卡车,所以就是加n-1条把所有车连起来,就是最小生成树了。。#include#include#includeconst int N=2

2013-09-18 21:09:31 918

原创 poj 1125 (求起点的最短路)

题意:有n个人每个人可以把谣言传给一些人,传给每个人有一定的时间,求出你把谣言传给谁,让所有的人都知道的时间最短。思路:枚举每个点为起点,到所有点的距离的最大值就是该点为起点所消耗的时间,求出最小值就可以了,因为给的n较小,直接             floyd就可以了。。#include#includeconst int N=110;const int

2013-09-18 20:54:42 934

原创 poj 2253 (二分+判断图连通)

题意:给出n个岛的坐标,要从第一个到跳到第二个岛,跳的时候有个距离限制,求出这个距离的最小值。思路:刚开始限制距离为两岛的直接距离,用二分每得到一个距离mid,判断1个2是否能连通。就求出最小的限制距离了。#include#include#includeconst int N=210;int f[N],n;double map[N][N];s

2013-09-18 20:45:43 930

原创 poj 3259 (Bellman_Ford判断负环)

题意:John的农场里n块地,m条路连接两块地,n个虫洞,虫洞是一条单向路,不但会把你传送到目的地,而且时间会倒退Ts。我们的任务是知道会不会在从某块地出发后又回来,看到了离开之前的自己。思路:虫洞连接的边是负权值的,如果途中存在一个负环的话,他可以沿着这个换一直走,时间肯定为负值。#include#includeconst int N=510;c

2013-09-16 16:35:01 952

原创 poj 1860 (Bellman_Ford判断正环)

题意:给出n种货币,m中交换关系,给出两种货币汇率和手续费,求能不能通过货币间的兑换使财富增加。用Bellman_Ford 求出是否有正环,如果有的话就可以无限水松弛,财富可以无限增加。#include#includeconst int N=110;const int inf=0x3fffffff;int start,num,n;double dist

2013-09-16 16:13:17 870

原创 hdu 4738 (双联通求桥)

2013 ACM/ICPC Asia Regional Hangzhou Online题目大意:有n个岛,曹操在一些岛之间建了一些桥,每个桥上有一些士兵把守,周瑜只有一个炸弹只能炸掉一个桥,炸弹需要士兵                   带过去,士兵的数量不能小于目标桥的守卫,求出最少要派出多少士兵。比赛一开始yyf就跟我说第一题是联通题,把题意跟我说了一下,我就知道是双联通求桥,但

2013-09-16 12:46:49 1213

原创 hdu 3290 (简单dfs)

题意:没有儿子的节点所结苹果数是节点的编号,有儿子的所结苹果是儿子数量(k+1)/2个,求跟节点的苹果数直接递归一下,先求出所有儿子的苹果树,在排序,,刚开始以为1就是根节点,根节点不确定,,#include#include#includeconst int N=20010;int w[N],vis[N],head[N],num,p[N];struct e

2013-09-09 18:38:08 1218

原创 URAL 1056(树形DP)

1056. Computer NetTime limit: 2.0 secondMemory limit: 64 MBBackgroundComputer net is created by consecutive computer plug-up to one that has already been connected to the net. Each new

2013-09-09 17:35:50 909

原创 URAL 1018 (金典树形DP)

连接:1018. Binary Apple TreeTime limit: 1.0 secondMemory limit: 64 MBLet's imagine how apple tree looks in binary computer world. You're right, it looks just like a binary tree, i.e. any

2013-09-09 16:18:46 1021

原创 hdu 3998 (dp+最大流)

题意:求最长上升子序列的长度和数量。分析:用dp求出最长上升子序列m,dp数组存的就是该元素为子序列结尾的长度,源点与长度为1的点建边,长度为m的与汇点连边,然后枚举任意两个元素,ai,aj(ai>aj&&i>j&&dp[i]==dp[j]+1),j跟i连边,因为每个点只能选一次,所以边的容量都为1,求出最大流。#include#includeconst int

2013-08-19 18:28:59 798

原创 hdu 4322 (费用流,巧妙建图)

题意:如果一个小孩得到他喜欢的一种糖果他会得到k个欢乐值,如果得到不喜欢的糖果只能得到1个欢乐值,每个孩子只有当欢乐值达到一定数量时才会高兴。能不能使所有的孩子都高兴。分析:如果一种糖果没人喜欢的话,不管把它给谁效果都是一样的,所以只需要把有人喜欢的糖果分给孩子,得到一个最大的欢乐值,然后再用普通糖果去给那些没有达到限制的欢乐值。这里应该注意的是:这样求出的特殊糖果带来的最大欢乐值代表,所有孩

2013-08-19 17:21:00 664

原创 hdu 3996 (最大权闭合图)

题意:有n个区域布局,每个区域有一些金矿,挖开金矿需要一定的费用,可以得到一定的利润,要想挖开一个金矿,必须挖开所有在这个金矿上边的金矿,求最大利益,给的数据价值太大,用64位。分析:如果一个金矿可以获利,就从源点引一条边,容量为获得的利益,否则向汇点引一条边,容量为损耗,一个金矿向所有的必须在它之前开发的金矿连边,容量为无穷大。求出最大流就是最小损耗,,,

2013-08-19 15:35:37 694

原创 hdu 3061 (最大权闭合图)

分析:城池之间有依赖关系,汇点与能获得兵力的城池连接,容量为可以获得的兵力,损耗兵力的城池与汇点连接容量为损耗的兵力,有依赖关系的城池间连边,容量为无穷大,跑网络流求出的最小割就是损耗的最小兵力,,,#include#includeconst int N=510;const int inf=0x3fffffff;int dis[N],gap[N]

2013-08-18 22:23:04 750

原创 hdu 3879 (最大权闭合图)

题意:金典的最大获利问题,通信公司可以在n个地方建立信号站,每个信号站的建立要一定的费用,有m个要求,每个要求是如果两个地方都建立了信号站就会获利,求出公司的最大获利。建图:获利边的选择要依赖点。源点跟边相连容量为边的获利,每个点跟汇点相连,容量为费用,每条边跟依赖的两个点相连,容量为无穷大,求出的最大流就是最小费用,,#include#includeconst

2013-08-18 22:01:13 784

原创 hdu 3917 (最大权闭合图)

题意:政府有一些路,m个公司来修,每个公司修路要交税给政府,修路政府要付给公司费用,求政府能获得的最大利润,如果选择一个公司负责一个项目,那么该公司负责的其它项目也必须由他负责,并且与其有相连关系的公司也必须选择。。建图:利润=所有公司的税收-(未选择的公司的税收+选择公司的补助),后两项之和最小的情况利润才会最大,汇点连接公司容量为公司的税收,公司与汇点相连容量为给该公司的补助,公司间有依赖

2013-08-18 20:19:16 715

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除