上一页 1 2 3 4 5 6 7 8 9 ··· 13 下一页
摘要: 链接:http://acm.hdu.edu.cn/showproblem.php?pid=4001亚洲区预选赛大连赛区的网络赛题目,简单的DP,首先按照长度宽度和id值进行一遍排序,这一遍排序虽然保证不了在第i个前面的都是可以被第i个放到其上面的,但是保证了在第i个后面的都是不可以的。排序之后的dp[i]表示第i个放上之后的最优值。View Code 1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<cstdlib> 5 #define N 1005 6 阅读全文
posted @ 2012-08-28 16:13 zhenhai 阅读(155) 评论(0) 推荐(0)
摘要: 链接:http://poj.org/problem?id=2823利用单调队列的出队入队,维护区间的最值,保证队列单调递增或单调递减,要维护单调递增队列,当一个数字插入的时候,从队尾往前找到第一个比它小的值把后面的值都删掉,然后把这个值放在找到的位置的后面,单调递减队列也是类似的情况,因为是单调序列,查找过程可以用二分查找。View Code 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #define N 1000005 5 using namespace std; 6 int 阅读全文
posted @ 2012-08-28 13:00 zhenhai 阅读(186) 评论(0) 推荐(0)
摘要: 链接:http://acm.hdu.edu.cn/showproblem.php?pid=4263杭电热身赛的题,属于简单题,两次Kruskal算法,先把所有的红边加完,红边可以保证一部分的图是联通的,然后加蓝边构成生成树,那么这些蓝边就是整个生成树当中必须要有的边(其实不是因为这些边必须要有,因为这些边连的点必须要加到生成树里,所以必须要有一定数量的蓝边,可能这些蓝边的选择方案有很多,但是数量是一定的),然后把图还原,把原来必须的蓝边先加上,再一直加没有用过的蓝边,最后看加的蓝边的数量是不是>=k如果满足则能有方案做到,否则不能。View Code 1 #include<iost 阅读全文
posted @ 2012-08-26 10:18 zhenhai 阅读(223) 评论(0) 推荐(0)
摘要: 链接:http://poj.org/problem?id=1112题意是把一些人分成两组,要求每一组的人必须互相认识,并且两组的人数尽量的接近,如果我们用认识的关系进行建图,那么这道题将会相当麻烦,如果用不认识的关系建图,那么不认识人的两个人之间连一条边,可以把这些点分为一个二部图,然后对二部图进行染色标记,如果有不认识的两个人分在了同一组,那么就是无解的情况,否则,利用DP求解一个离n/2最近的值,并且记录路径View Code 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #d 阅读全文
posted @ 2012-08-25 11:24 zhenhai 阅读(217) 评论(0) 推荐(0)
摘要: 链接:http://poj.org/problem?id=2135这道题数据范围给的很坑爹啊,题面给的1000,我开到1500都过不了,RE了一个小时,最后实在没办法,开到2000,一下子A了,真想说一句:fuck!!要求不能有重复的路径,路径的长度为费用,每条路径的流值为1,并且建立超级源点和超级汇点,从超级源点连接到0一个流值为2,费用为0的边,n和超级汇点也连这么一条边,因为是无向图,所以要加四条边,而且只能用邻接表的实现。剩下的是最小费用流的模板,spfa()找最短路径View Code 1 #include<iostream> 2 #include<cstdio&g 阅读全文
posted @ 2012-08-23 21:27 zhenhai 阅读(229) 评论(0) 推荐(0)
摘要: 链接:http://acm.hdu.edu.cn/showproblem.php?pid=3715用a[i]表示a[i]对应的x[a[i]]是0,a[i]+n表示是1,则当c[i]=0时,不能同时为0,则a[i]->b[i]+n,b[i]->a[i]+n当c[i]=1时,a[i]->b[i],b[i]->a[i],a[i]+n->b[i]+n,b[i]+n->a[i]+n;当c[i]=2时,a[i]+n->b[i],b[i]+n->a[i];最后如果二分枚举深度值,要用到二分枚举View Code #include<iostream> 阅读全文
posted @ 2012-08-15 19:21 zhenhai 阅读(157) 评论(0) 推荐(0)
摘要: 周长并和面积并的代码基本上差不多,只不过多了两个rb,lb判定端点是否被覆盖的判断,维护的过程也增加了一点难度,但是整体上是差不多的。View Code #include<iostream>#include<cstring>#include<cstdio>#include<cstdlib>#include <algorithm>#define N 5005#define L(x) x<<1#define R(x) x<<1|1using namespace std;struct node{ int l,r,nu 阅读全文
posted @ 2012-08-13 20:10 zhenhai 阅读(247) 评论(0) 推荐(0)
摘要: 线段树题目,给出一个序列,查询一段a,b之间的最大的连续相同的数字的和最大是多少,定义为MS,因为对于一个区间的MS,可能来自于左子节点或者右子节点,或者当左节点最右面的数字和右节点的左面的数字相同时可能会来自两个节点合并的部分,所以,树中的节点要维护五个基本的值,lval(最左侧的值),lnum(最左侧值连续的个数),rval(最右侧的值),rnum(最右侧值连续的个数)以及MS,为了提高效率,还要增加一个标记值,不需要更新每一个节点。View Code #include<iostream>#include<cstdio>#include<cstring> 阅读全文
posted @ 2012-08-13 16:44 zhenhai 阅读(1948) 评论(0) 推荐(0)
摘要: 求一个有向图中,从所有起点(入度为0)到终点(唯一,出度为0)经过的次数最多的边经过的次数,两次拓扑排序,一次向前求出所有起点到某个点的所有路径总数f[i],一次向后,求出某个点到终点的所有路径总数g[i],则对一条边(u,v),f[u]*g[v]即为边所需要经过的次数。View Code 1 #include<stdio.h> 2 #include<string.h> 3 #define N 1005//数据范围没有题中描述的那么大…… 4 #define M 10005 5 int map[N][N]; 6 int edge[M][2]; 7 int in[N],o 阅读全文
posted @ 2012-07-27 11:13 zhenhai 阅读(242) 评论(0) 推荐(0)
摘要: 混合图的欧拉回路问题欧拉回路问题。1 定义 欧拉通路 (Euler tour)——通过图中每条边一次且仅一次,并且过每一顶点的通路。 欧拉回路 (Euler circuit)——通过图中每条边一次且仅一次,并且过每一顶点的回路。 欧拉图——存在欧拉回路的图。2 无向图是否具有欧拉通路或回路的判定 G有欧拉通路的充分必要条件为:G 连通,G中只有两个奇度顶点(它们分别是欧拉通路的两个端点)。 G有欧拉回路(G为欧拉图):G连通,G中均为偶度顶点。3 有向图是否具有欧拉通路或回路的判定 D有欧拉通路:D连通,除两个顶点外,其余顶点的入度均等于出度,这两个特殊的顶点中,一个顶点的入度比出度大1,另一 阅读全文
posted @ 2012-07-26 20:11 zhenhai 阅读(307) 评论(0) 推荐(0)
上一页 1 2 3 4 5 6 7 8 9 ··· 13 下一页