自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 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 806

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

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

2013-08-19 17:21:00 676

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

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

2013-08-19 15:35:37 707

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

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

2013-08-18 22:23:04 763

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

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

2013-08-18 22:01:13 793

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

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

2013-08-18 20:19:16 729

原创 hdu 1565&&hdu 1569 (最大点权独立集)

题目意思很明确就是选一些没有相连的数字,使和最大,建成二分图后求最大点权独立集,,#include#includeconst int N=2510;const int inf=0x3fffffff;int dis[N],gap[N],head[N],num,start,end,ans;struct edge{ int ed,flow,next;}

2013-08-16 17:13:09 780

原创 zoj 3165 (最小割,最大点权独立集)

胡伯涛的《最小割模型在信息学竞赛中的应用》写的真牛。这道题是选择一些男孩和女孩参加party,邀请的男孩女孩之间不能有 8g,图就是个明显的二分图,就是选择一些点之间没有8g关系,就是二分匹配里的最大独立集,但是要求选出的点的权值最大,就是最小割模型里的最大点权独立集了,最大点权独立集+最小点权覆盖集=图的总权值,这里跟二分匹配一样求出最小点权覆盖就可以,求出最小割后,从原点深搜,流量>0

2013-08-16 15:55:01 873

原创 hdu 4619 (二分匹配,最大匹配)

这题最大匹配居然能水过去,比赛的时候怎么想都会超时,最后敲完能A了,,,,,,,#include#include#define N 20000int link[20000],vis[N],match[N],n,m;struct edge{ int y; edge *next;}*E[20000];void added

2013-08-15 21:40:46 775

原创 hdu 2899 (数学+二分)

//函数在0——100,肯定是先递减后递增的,所以求导数为0的点,用二分#includedouble y;double F(double x){ return ((6*x+8)*x*x*x*x*x*x+7*x*x*x+5*x*x-y*x);}double f(double x){ return ((42*x+48)*x*x*x*x*x+21*x*x+10*x-y);}int

2013-08-15 21:40:20 744

原创 hdu 3315 (KM,优先选择原来的匹配)

题意很明确,,就是一个二分图,求最优匹配,,蛋疼的是第二个要求,有多少个跟原来的匹配,就是优先选择原来的匹配,跟hdu 2853一样,将边的权值扩大1000倍,原来的匹配边+1,求得的值sum/1000就ok了,原来的匹配个数=sum%1000。。。。#include#include#includeconst int N=110;const in

2013-08-15 21:18:18 947

原创 hdu 3667 (费用流,拆边)

刚开始没想着拆边,写完了连实例都过不了,仔细想了一下,如过直接做的话,会选择一条路,增加的流量是最小边的满流,而不去其余的路,这样就不对了,费用是跟流量的平方相关的。每条边的流量最大是五,拆成五条边还是可以的,,不过拆边后每条边的费用怎么算困扰我一天多,如果拆的几条边分别对应第几次走的话,第一次就是a*1*1,如果该路上流量为2的话,总费用就是a*2*2,所以第二次走费用就是a*2*2-a*1*1

2013-08-15 18:42:19 894

原创 hdu 4679 (树形DP)

题意:给一棵树,边的权值都是1,摧毁每条边是有代价的,选择摧毁一条边,把一棵树分成两部分,求出两部分中距离最大的两点的距离,求出距离*代价最小的边,多条的话输出序号最小的。刚开始理解错题意了,wrong了几次,一直在纠结摧毁一条边后上边的树的最远距离怎么求,儿子树的最远距离就是所有子树的最长边+次长边就可以了。当我们求到一个节点u时,肯定有一个祖先节点,该祖先节点在摧毁与u链接的边后剩余的子树

2013-08-15 17:39:33 1231 2

原创 poj 3422 (费用流)

从左上角到有下角k次能获得的最大值。跟hdu 2686一样的题目,这题一个点可以重复走,只能得到一次值。#include#include#includeconst int N=5100;const int inf=0x3fffffff;using namespace std;int dist[N],head[N],num,start,end,n,

2013-08-14 23:26:09 640

原创 hdu 2686&&hdu 3376 (费用流,巧妙的建图)

开始就想着要拆点,i与i‘连边容量为2,费用为矩阵中的值,但是一想就不对了,如果这样的话,每个点可以走两次,每次的费用都是一样的,应该有一次为0才对,所以应该加两条边,容量都是1,一条边的费用为0。然后往左,下连边,,,跑费用流,求出最大的费用。。。hdu 3376 数据开大些就可以了,N=720010#include#include#i

2013-08-14 18:47:31 786

原创 poj 2135 (基础费用流)

题意:从1到n再到1,每条边只能走一次,求最短距离。建图:每条边只能走一次就是流量是1,添加源点与1相连,容量为2,费用为0,n与汇点相连容量为2,费用为0;求增广路用SPFA最短路求,,#include#include#includeconst int N=1100;const int inf=0x3fffffff;using nam

2013-08-14 15:40:40 635

原创 poj 3498 (最大流,枚举汇点)

题意:有n块浮冰,每块上有一定数量的企鹅,每块浮冰可以承受企鹅跳一定的次数后消失,给出企鹅跳的最大距离,求所有企鹅能跳到哪块浮冰上见面。建图:添加源点,汇点,源点与浮冰相连,容量为浮冰上企鹅的数量,浮冰之间可以相互连边,所以要拆点,拆完后点与拆点间连边,容量为浮冰能承受企鹅跳的次数,如果两块浮冰i,j间可以到达,加边i+n—>j,j+n—>i,容量无穷大。然后枚举所有浮冰与汇点相连求最大流。

2013-08-14 09:17:38 1202

原创 hdu 3228 (最大流+二分)

题意:一共有N个城市,一些城市里有金矿,一些城市里有仓库,金矿和仓库都有一个容量,有M条边,每条边是双向的,有一个权值,求将所有金矿里的储量都运送到仓库中,所需要经过的道路中,使最大的权值最小思路:增设一个超级源点和一个超级汇点,源点与每一个城市相连,容量为黄金数量,汇点与仓库相连,容量为仓库的容量,然后就是二分最小的最大相邻距离,跑最大流验证。#i

2013-08-13 18:50:43 967

原创 poj 1459 (最大流)

最大流简单题,,这题重要的是知道了scanf("%s",str);sscanf(str,"(%d,%d)%d",&x,&y,&w);读入方式#include#includeconst int N=210;const int inf=0x3fffffff;int dis[N],gap[N],head[N],num,start,end,ans,n,m

2013-08-12 17:21:04 708

原创 poj 1087 (最大流)

题意:在一个会议室里有n种插座,每种插座一个,每个插座只能插一种以及一个电器(或者适配器),有m个电器,每个电器有一个插头需要插在相应一种插座上,不是所有电器都能在会议室找到相应插座,有k种适配器,每种适配器可以有无限多数量,每种适配器(a, b)可以把b类插座变为a类插座,问最后有多少个电器无法使用。建图:源点,电器,插座,汇点,,源点跟电器建边,流量为1,电器与对应的插座连边,流量为1,转

2013-08-12 17:11:41 606

原创 poj 2455(二分+最大流)

题意:从1到n,要走不少于K条路,每条路不能重复走,点可以重复走,求所走的路中最长的最小,,找出距离的最大值,然后二分,建图时符合的每条边链接的两点间建双向边,流量都为1,求最大流#include#includeconst int N=210;const int inf=0x3fffffff;int dis[N],gap[N],head[N],num

2013-08-12 16:12:06 707

原创 poj 2391 (Floyd+最大流+二分)

题意:有n块草地,一些奶牛在草地上吃草,草地间有m条路,一些草地上有避雨点,每个避雨点能容纳的奶牛是有限的,给出通过每条路的时间,问最少需要多少时间能让所有奶牛进入一个避雨点。两个避雨点间可以相互到达,所以必须要拆点,如果i-->j可以到达,加边i->j+n,流量无穷大,当然i->i+n也必须有边,,,Folyd要用long long,,,,,

2013-08-12 15:19:23 620

原创 poj 2289 (最大流+二分)

题意:把n个好友分到m个组。求每个组的最大人数最小可以是多少人,,,最大流+二分,,,,isap跑得还是挺快的,,,#include#includeconst int N=1510;const int inf=0x3fffffff;int dis[N],gap[N],head[N],num,start,ans,end,first[N]

2013-08-12 10:33:23 949

原创 poj 2112 (最大流+二分)

题意:有k台挤奶机,c头奶牛,给出这k+c个实体间的距离,求出每头奶牛都到一台挤奶机去,怎么分配使奶牛走的最大距离最小。用二分枚举最大距离,,,,#include#include#define N 500#define inf 0x3fffffffint map[N][N],dis[N],gap[N],head[N],num,n,m,D,start,

2013-08-12 08:35:02 672

原创 poj 3281 (最大流,构图)

题意:每头牛有想吃的食物和饮料,每头牛最多只能吃一种食物和一种饮料,给出牛的个数,食物和饮料的种类数,每头牛想要的食物和饮料的种类。刚开始想着把牛放中间,从汇点到食物,食物到牛,牛到饮料,饮料到汇点建图,当时没想清楚就敲了,结果wrong了,后来一想这样建图的话,经过没头牛的流量就不是1了,果断拆点,把每头牛拆成两个点,流量为1#includ

2013-08-10 19:31:34 717

原创 hdu 3605 (最大流)

判断是否满流,,,人数给了100000,一看普通建图肯定不行,卡了几天了,,看了网上说把状态相同(选择星球相同)的人合并,用二进制,最多有2^10种状态,#include#include#include#define N 100100#define inf 0x3fffffffusing namespace std;int dis[N],

2013-08-10 18:53:49 980

原创 hdu 2732&&poj 2711 (最大流)

非常好的一道拆点题目,终于学会isap了,递归的,这几天要把非递归实现的敲出来,,题意:给出蜥蜴可以跳的最大距离,从一根柱子跳向可以到达的任意柱子,每个柱子有高度,蜥蜴没跳一次柱子会下降1米,问有多少蜥蜴跳不出所给的图。建图:源点与每个蜥蜴所在的柱子建边流量为1,应为柱子间可以互相达到的,所以每个柱子应该拆成两个点,每根柱子相当于一条边,流量为柱子的高度,没两个可以互相到达的柱子间建边(一

2013-08-10 18:29:45 937

原创 hdu 3572 (判断满流)

最大流问题:dinic做的,isap正在学习中建图还是比较容易的:源点与每个任务建边流量为任务需要的时间,任务与时间段的每个时间点建边流量为1,每个时间点与汇点建边流量为机器的个数#include#include#include#define N 3000#define inf 0x3fffffffusing namespace s

2013-08-10 18:09:46 768

原创 hdu 2460 poj 3694 (双联通+LCA)

在给出的两个点上加一条边,求剩下桥的数量,,不会LCA在线,就用了最普通的,先Tarjan双联通缩点,然后将缩完的图建成一棵树,树的所有边就是桥了,如果在任意两点间加一条边的话,那么从两点到最近公共祖先的所有边都不是桥了。。。。。。#pragma comment(linker, "/STACK:10240000000000,10240000000000"

2013-08-02 09:48:59 989

原创 hdu 4635 (强连通缩点)

多校联赛4的一道题,,给一个有向图,问最多加多少条边后仍然不是强联通,以前总会遇到问最少加几条边让图成一个强连通图,比赛时自己就找到了答案,当时想着添加最多的边后一定是将原来的图连成两个强连通分量,而两个强连通分量间的边最多是两个联通分量的点数之积,再加上每个联通分量内部的点的边数就是所有的边数,再减去原来的边就是新加上的边了,把图强连通缩点后,求出每个出度或入度为0的联通分量为一个联通分量,剩余

2013-08-01 19:19:32 999

原创 hdu 2242 (双联通+树形DP)

Tarjan双联通缩点后,建树,任选一点为根节点求出所有点的字节点的个数+1:m然后求出n-m与m的差值,求出最小的#include#include#include#define inf 0x3fffffff#define N 10001using namespace std;int belong[N],dfs[N],low[N],idx

2013-08-01 11:55:03 840

空空如也

空空如也

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

TA关注的人

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