上一页 1 ··· 24 25 26 27 28 29 30 31 32 ··· 38 下一页
摘要: 密码:1234561001http://acm.hdu.edu.cn/diy/contest_showproblem.php?pid=1001&cid=16288&hide=0模拟题目,不过在pos赋初值的时候弄错了,我的pos要的到的值是0-n-1而我给赋值成0了,因为我要用它来判断。所以纠结了老久了才检查到。这种错误很难找的。提醒一下自己认真!View Code #include <cstdio>#include <cstring>#include <iostream>#define maxn 5007using namespace st 阅读全文
posted @ 2012-07-24 20:54 E_star 阅读(248) 评论(0) 推荐(0) 编辑
摘要: 不转不行,太有意思:来自:http://blog.csdn.net/nnnnyyyy/archive/2011/05/10/6410554.aspx最欣赏的是这个:以下是原文:偶是一个程序员。偶的生活很简单.确切地,用两个词,来说,就像偶写的代码一样,单调且无聊。早上七点被手机叫醒:睁开眼,刷牙,洗脸,吃早饭八点半到办公室是必须的,然后开始一天工作:那什么时候下班昵?偶不知道是会是几点钟:从日出到日落,从星期一到星期天,日子就像是写错了代码产生的一个死循环:每周双休?对偶来说只能是一种奢望:平时,他们都叫偶:X工。其实只有偶最清楚,X工不是说偶是一个姓X的工程师,而是一个姓X的民工:偶没有钱, 阅读全文
posted @ 2012-07-24 17:07 E_star 阅读(898) 评论(0) 推荐(2) 编辑
摘要: 这一块关键理解延迟标记(或者说懒惰标记)lz[],就是每次更新的时候不要更新到底,用延迟标记使得更新延迟到下次需要更新或者询问到的时候再更新。这里主要包括两个方面:1:成端替换; 2:成端累加(累减);hdu 1698http://acm.hdu.edu.cn/showproblem.php?pid=1698题意:给定n个连续的奖牌(每个奖牌都有一个价值),初始都为铜牌。有q个操作X,Y,Z,将区间[x,y]内的奖牌的价值改为Z,问经过q个操作后总的价值为多少。思路:就是典型的成段替换,lz标记,关键是注意将lz pushdown。。View Code #include<iostream 阅读全文
posted @ 2012-07-24 14:38 E_star 阅读(332) 评论(0) 推荐(0) 编辑
摘要: 问题描述:对于任何正整数x,起约数的个数记做g(x).例如g(1)=1,g(6)=4.如果某个正整数x满足:对于任意i(0<i<x),都有g(i)<g(x),则称x为反素数.现在给一个N,求出不超过N的最大的反素数.比如:输入1000 输出 840思维过程:求[1..N]中约数在大的反素数-->求约数最多的数如果求约数的个数 756=2^2*3^3*7^1(2+1)*(3+1)*(1+1)=24基于上述结论,给出算法:按照质因数大小递增顺序搜索每一个质因子,枚举每一个质因子为了剪枝:性质一:一个反素数的质因子必然是从2开始连续的质数.因为最多只需要10个素数构造:2,3 阅读全文
posted @ 2012-07-24 10:52 E_star 阅读(595) 评论(0) 推荐(0) 编辑
摘要: 并查集结构: for (i = 0; i <= n; ++i) f[i] = i;查找祖先:int find(int x){ if (x != f[x]) { f[x] = find(f[x]); } return f[x];}合并操作:经常使用的:void Union(int x,int y){ x = find(x); y = find(y); if (x != y) { f[y] = x; num[x] += num[y];//根记录子系的个数 }}还有一种写法:void Union(int... 阅读全文
posted @ 2012-07-24 08:57 E_star 阅读(223) 评论(0) 推荐(0) 编辑
摘要: 结构:struct node{ int flag; node *next[27];}*head;生成节点:/*动态分配内存*/node * newnode(){ int i; node * p = new node; // c语言用(node * )malloc(sizeof(node), 这里是动态分配内存,时间上可能消耗的多一些 p->flag = 0; for(i = 0; i < 26; i++) p->next[i] = NULL; return p;}/*静态分配内存*/node T[1000000];int t = 0... 阅读全文
posted @ 2012-07-24 08:50 E_star 阅读(367) 评论(0) 推荐(0) 编辑
摘要: hdu1166http://acm.hdu.edu.cn/showproblem.php?pid=1166题意:中文不说了,大体意思是给定n个数;接下来每行有一条命令,命令有4种形式:(1) Add i j,i和j为正整数,表示第i个营地增加j个人(j不超过30)(2)Sub i j ,i和j为正整数,表示第i个营地减少j个人(j不超过30);(3)Query i j ,i和j为正整数,i<=j,表示询问第i到第j个营地的总人数;(4)End 表示结束,这条命令在每组数据最后出现;很纯的单点更新题目:View Code #include <cstdio>#include &l 阅读全文
posted @ 2012-07-22 22:03 E_star 阅读(367) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=3686题意:有n个订单,和m个工厂,给出data[i][j]矩阵表示第i个订单在第j工厂加工消耗的时间。同一时间内每个机器只能加工一个订单,问加工完所有订单后,使得平均加工时间最小。这里关键是拆点建图,很是难理解看老长时间;假设订单N个订单的完成时间为T1 T2 T3 ......Tn。则总的时间为T = T1*n + t2*(n - 1) + ..... + Tn*1;前边完成的时间还会影响后边订单完成的时间T1T1+T2T1 +T2 + T3......设第i个订单,把第j个机器拆成N个点,这N个点中的第k个点表示第i个订单在j机器上倒 阅读全文
posted @ 2012-07-22 21:44 E_star 阅读(242) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=2400题意:有n个管理员需要雇佣n个工作人员。 每个管理员对每个工作人员的评价不同,评价值(score)从0-n-1,0代表评价最高,n-1代表评价最低,(这样处理用KMq求解时才能出现0)同样,每个工作人员对每个管理员也有不同 的评价,评价值也是从0-n-1,0代表评价值最高,n-1代表最低。问n个管理员怎样选择n个工作人员可以使的每个人的平均评价值最小。即总的评价值 /(2*n)最小。如果存在多种最佳方案,则按照字典序输出每一种情况。思路:我们把N个管理员与N个员工分成两个点集,X,Y.管理员X[i]与员工Y[j]总的评价值为X[i]对 阅读全文
posted @ 2012-07-22 17:13 E_star 阅读(354) 评论(0) 推荐(0) 编辑
摘要: HDU 4217 Data Structure?http://acm.hdu.edu.cn/showproblem.php?pid=4217CZ做的一道题目,我帮忙看了看。题意:给定N个数(1---N),K个操作,然后给K数,i1,i2,i3.......ik 每次取走当前状态下等的第i个数(从小到大的),问取走的数的和。给的那个的n为262144可以断定肯定是O(n*log(n))级的算法,所以选定线段树。叶子节点赋值为1,这些节点存储的就是数的个数,在添加一个val数组记录是哪个数。每次更新将节点a[rt]变成0,找出对应的val[rt]即可。这里坑爹的地方时sum求和时,要用—int64 阅读全文
posted @ 2012-07-22 10:35 E_star 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 差分约束:http://972169909-qq-com.iteye.com/blog/1185527KM算法:http://972169909-qq-com.iteye.com/blog/1184514最短路:http://972169909-qq-com.iteye.com/blog/1156071匹配:http://hi.baidu.com/_lt_zyc/item/0414aee9030341e7e1a5d4fe树状数组:http://hi.baidu.com/lilu03555/blog/item/4118f04429739580b3b7dc74.html矩阵:http://www. 阅读全文
posted @ 2012-07-21 21:10 E_star 阅读(272) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=2195在一个n*m的方格里有nx人(m)和ny个房子(H),(nx = ny)人每次可以向四周移动单位距离,花费1¥,求最小花费是每个人都能进入一个房间。最小费用最大流可以做http://www.cnblogs.com/E-star/archive/2012/06/28/2567079.html这里是个二分图求最小权匹配问题,可以用KM算法求,只要把w[i][j] 化成负数,太用木板求最大的负数,然后输出-KM()就得到最小的整数了。#include <cstdio>#include <cstring>#includ 阅读全文
posted @ 2012-07-21 20:58 E_star 阅读(265) 评论(0) 推荐(0) 编辑
摘要: 两个不错的介绍KM算法的文章:1:http://www.cppblog.com/MatoNo1/archive/2011/07/23/151724.aspx2: KM算法是通过给每个顶点一个标号(叫做顶标)来把求最大权匹配的问题转化为求完备匹配的问题的。设顶点Xi的顶标为A[i],顶点Yi的顶标为B[i],顶点Xi与Yj之间的边权为w[i,j]。在算法执行过程中的任一时刻,对于任一条边(i,j),A[i]+B[j]>=w[i,j]始终成立。KM算法的正确性基于以下定理: 若由二分图中所有满足A[i]+B[j]=w[i,j]的边(i,j)构成的子图(称做相等子图)有完备匹配,那么这个完备匹 阅读全文
posted @ 2012-07-21 19:21 E_star 阅读(294) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=2255O(n^4)模板#include <cstdio>#include <cstring>#include <iostream>#define maxn 301using namespace std;const int inf = 99999999;int w[maxn][maxn],link[maxn];int lx[maxn],ly[maxn];bool vtx[maxn],vty[maxn];int nx,ny;bool dfs(int i){ int j; vtx 阅读全文
posted @ 2012-07-21 19:19 E_star 阅读(226) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=3308题意:火星人要和地球人PK,地球人间谍搞到了一份情报:火星人要搞伞兵,登陆在地球一个row*col的地图上,而且知道伞兵的数量和每个伞兵要降落的格子。为了消灭敌人,可以在某一行或者某一列安置激光枪。每个激光枪可以瞬间消灭这一行(或者列)的敌人。安装消灭第i行的激光枪消费是ri。安装消灭第j行的激光枪消费是ci。现在总部要你花费最小的费用,安装好足够的激光枪去消灭所有的火星人,问最小的花费是多少。这里花费的定义有点不同:是每个激光器消费的乘积。思路:最小割_最大流,把伞兵看成边,行列看成节点,转化为了带权二分图最小点覆盖。加入超级源点和 阅读全文
posted @ 2012-07-21 10:21 E_star 阅读(343) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=3114/*这道题和3592非常类似,所以做了那道题后再做这道就有感觉了,自己写的而且1Y好开心的样子,哈哈.....题意:战争期间国家之间的通信,给定n个城市,m个城市之间的可传输协议。如果若干个城市强连通则说明他们属于同一个国家股他们之间的通信可立即到达,消耗时间为0,否则就要消耗指定的时间h了。给定k个询问x,y问由x到y的最小耗费时间。思路:首先根据给定m个协议,构建图,然后求强连通分量缩点,将缩点后的图,重新建立,如果属于同一国家他们之间的权值就变为0,不属于同于国家权值仍为h。然后就是spfa求最短路了;*/#include &l 阅读全文
posted @ 2012-06-30 17:04 E_star 阅读(300) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=3592/*题意:给定一个n*m的矩阵,你从左上角出发,规定只能往当前点的右边或者下边走,其中还有一些特殊点*具有特殊的力量可以把你传到特定的一个点(你可以选择传送也可以选择不传送),问从左上角出发到不能走下去,最多能获得的矿石量(每个方格对应着一个数字表示矿石数量)。点#直接跳过思路:首先build1根据题意描述,见图,将二位矩阵转化为一维的点建图,每个点可以向右向下建立有向边,点*还可以向传送点建边。建完后tarjan缩点,然后在根据缩点后的点建图,添加超级源点s,权值为i-j sum[j], 求最长路即可的结果;中间数组开成了44贡献. 阅读全文
posted @ 2012-06-30 10:54 E_star 阅读(281) 评论(0) 推荐(0) 编辑
摘要: 以前接触过的算法,现在拾起来还是有些费劲,只能说没有掌握牢固吧:双连通分量:pku 3694Networkhttp://poj.org/problem?id=3694 以前做过的一道题目:http://www.cnblogs.com/E-star/archive/2012/02/15/2353157.html又熟悉了一遍;pku 2942 比较麻烦,先搁着吧:缩点题目:pku 2186Popular Cowshttp://poj.org/problem?id=2186题意:给出n个牛,以及m个羡慕关系,找出最受羡慕的牛,该牛满足其他n-1个牛,都会羡慕它(直接羡慕或者间接羡慕);思路:将强连通 阅读全文
posted @ 2012-06-29 12:06 E_star 阅读(300) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=3422/*题意:给定一个n*n的矩形方格,要求从(1,1)出发,只能往右下角走,(i + 1,j) 或者 (i + n,j)每次走完将格子里面的数累加,并将所走过的格子里面的数置零,问走k能得到的最大的数:*//*网络流的题目建图是关键,这道题目建图很难想啊!首先要拆点。这里将一个点拆分成两个点,建立两条边,一条变得流量为1,权值为 map[i][j],另一条则是流量为无穷,权值为0了。注意这条边是为了保证在走过该店后,map[i][j]为0后,还能继续走因为它有流量且权值为0. 还有就是往右下角走建立流量为无穷权值为0的边。最后要建立的就 阅读全文
posted @ 2012-06-28 16:27 E_star 阅读(210) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=2195题意是:有相同数量的人与房子,每一时刻人都可以花费1$的钱走一步,问让每个人到达一个屋子的最少需要的费用。建立源点与汇点,求有源点到汇点的最小费用最大流;改了一下不需要f[][]的模板。#include <iostream>#include <cstring>#include <cstdio>#include <queue>#include <cstdlib>#define maxn 207using namespace std;const int inf = 9999999 阅读全文
posted @ 2012-06-28 09:18 E_star 阅读(320) 评论(0) 推荐(0) 编辑
上一页 1 ··· 24 25 26 27 28 29 30 31 32 ··· 38 下一页