上一页 1 ··· 16 17 18 19 20 21 22 23 24 ··· 61 下一页
摘要: 题目链接:http://poj.org/problem?id=3422思路:求从起点到终点走k次获得的最大值,最小费用最大流的应用:将点权转化为边权,需要拆点,边容量为1,费用为该点的点权,表示该点的权值只能获取一次,另外,应该连一条容量为inf,费用为0的边,因为每条边都可以走多次。另外就是增加源点和汇点了,源点与起点连容量为k,费用为0的边,表示可以走k次,同理终点与汇点也如此。然后就是求最大费用了,这与求最小费用类似,只需将spfa函数稍作修改即可。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using ... 阅读全文
posted @ 2013-08-27 15:24 ihge2k 阅读(304) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4597思路:要保证当前状态下,得到的是最优的,dfs+dp. 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 7 int Left[44],Right[44]; 8 int dp[22][22][22][22]; 9 int n,ans,MAX;10 11 int dfs(int upl,int downl,int upr,int downr,int sum)12 {13 if(dp[upl][dow... 阅读全文
posted @ 2013-08-27 10:42 ihge2k 阅读(356) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=3498思路:首先设一个超级源点,将源点与各地相连,边容量为各点目前的企鹅数量,然后就是对每个冰块i进行拆点了(i,i+n),边容量为能够接受的受损程度,这样就把点权问题转化为边权问题了,然后就是对于那些能够相互跳跃的冰块之间连边(i+n,j),(j+n,i),边容量为inf。最后就是枚举汇点看是否等于总数。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 #define MAXN 2... 阅读全文
posted @ 2013-08-26 20:44 ihge2k 阅读(316) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=3084思路:题目的意思是不让入侵者进入保护的房间,至少需要锁几道门。网络流建模:设一个超级源点,源点与有入侵者的房间相连,边容量为inf,对于那些被入侵的房间,假设房间a有们通往b,则连边a->b,容量为inf,连边b->a,容量为1,因为控制权在a,所以只要进入房间a,就能进入房间b,而相反,对于那些进入房间b的入侵者, 只要锁上了a与b之间的那扇门,就无法进入房间a了,因此连边1。最后就是跑最大流求最小割就行了。 1 #include 2 #include 3 #include 4 #include 5 #incl 阅读全文
posted @ 2013-08-26 19:47 ihge2k 阅读(346) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=1966思路:从网上找了一下大牛对于这类问题的总结:图的连通度问题是指:在图中删去部分元素(点或边),使得图中指定的两个点s和t不连通(不存在从s到t的路径),求至少要删去几个元素。图的连通度分为点连通度和边连通度:(1)点连通度:只许删点,求至少要删掉几个点(当然,s和t不能删去,这里保证原图中至少有三个点);(2)边连通度:只许删边,求至少要删掉几条边。并且,有向图和无向图的连通度求法不同,因此还要分开考虑(对于混合图,只需将其中所有的无向边按照 无向图的办法处理、有向边按照有向图的办法处理即可)。【1】有向图的边连通度: 这个 阅读全文
posted @ 2013-08-26 16:49 ihge2k 阅读(4091) 评论(0) 推荐(1) 编辑
摘要: 题目链接:http://poj.org/problem?id=1815思路:题目要求是剔除多少个点,可以将其转化为剔除多少条边,因此需要拆点,将点i拆成i,i+n,便容量为1,表示每个人起的传递作用只能是一次。然后就是枚举了,删除某条边,如果求出的最小割比原来的要小,说明减少的是割边集。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define MAXN 444 8 #define MAXM 4444444 9 #define inf 1que; 39 ... 阅读全文
posted @ 2013-08-26 15:29 ihge2k 阅读(260) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=3249思路:dp[i]表示到点i的最大收益,初始化为-inf,然后从入度为0点开始bfs就可以了,一开始一直TLE,然后优化了好久才4000ms险过。之后有写了个dfs记忆化搜索,果然快多了。bfs AC code: 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define MAXN 100100 8 #define MAXM 2002000 9 #define inf 1que;32 fill(dp,dp... 阅读全文
posted @ 2013-08-26 11:20 ihge2k 阅读(404) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=2914思路:算法基于这样一个定理:对于任意s, t V ∈ ,全局最小割或者等于原图的s-t 最小割,或者等于将原图进行 Contract(s,t)操作所得的图的全局最小割。算法框架:1. 设当前找到的最小割MinCut 为+∞ 。2. 在 G中求出任意 s-t 最小割 c,MinCut = min(MinCut, c) 。3. 对 G作 Contract(s, t)操作,得到 G'=(V', E'),若|V'| > 1,则G=G'并转 2,否则MinCut 为原图的全局最小割。Con 阅读全文
posted @ 2013-08-26 10:06 ihge2k 阅读(773) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=1659思路: havel算法的应用:(1)对序列从大到小进行排序。(2)设最大的度数为 t ,把最大的度数置0,然后把最大度数后(不包括自己)的 t 个度数分别减1(意思就是把度数最大的点与后几个点进行连接)(3)如果序列中出现了负数,证明无法构成。如果序列全部变为0,证明能构成,跳出循环。前两点不出现,就跳回第一步!简单例子:4 4 3 3 2 2第二步后0 3 2 2 1 2排完续后3 2 2 2 1 0第二步后0 1 1 1 1 0排完续后1 1 1 1 0 0第二步后0 0 1 1 0 0排完续后1 1 0 0 0 0第二 阅读全文
posted @ 2013-08-25 21:13 ihge2k 阅读(897) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=3653思路:题目意思很简单,就是二维平面上的图,要求起点到终点的最短路。建图略坑,需要坐标映射,化二维为一维。然后就是Dijkstra求最短路了。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 #define MAXN 888 9 #define inf 1 >G;17 int n,m;18 19 int dist[MAXN];20 bool mark[MAXN];21 22 bool Di 阅读全文
posted @ 2013-08-25 19:04 ihge2k 阅读(245) 评论(0) 推荐(0) 编辑
上一页 1 ··· 16 17 18 19 20 21 22 23 24 ··· 61 下一页