
ACM
文章平均质量分 72
ACM_Victoria
To seize everything you ever wanted, one moment...
展开
-
POJ2396-带上下限制的最大流
#include #include #include using namespace std;const int NN=1000;const int MM=5000000;const int INF=0x3fffffff;bool blank=false;int n,m,S,T,NV,en,head[NN];struct Edge{ int u,v,flow,next原创 2012-08-12 23:03:28 · 1287 阅读 · 0 评论 -
HDOJ4322-费用流
/*好题~网络流不熟啊,刚开始枚举会被当成喜欢的糖的糖的组合来最大流,确实没有考虑清楚当bi%k的一些不同的情况~看了一篇比较有启发的博客后,才写的费用流:以糖果数量限制流量,在喜欢的糖果与人之间连边 在人与汇点间建费用为k,流量为b[i]/k的边,那么cost*flow就成了glad value了!(这是我茅塞顿开的地方) 那么我在之前用最大流做时不能处理的b[i]%k的问题也好原创 2012-08-02 11:52:34 · 616 阅读 · 0 评论 -
POJ2230-还是简单的欧拉回路求解
#include #include #include #include using namespace std;const int NN=10002;vector ans;vector adj[NN];int n,m,cur[NN];void dfs(int u){ for (int &i=++cur[u]; i<adj[u].size(); i++) {原创 2012-08-17 16:52:02 · 4936 阅读 · 0 评论 -
HDOJ2419-逆向处理操作,并查集,set
/*好题!本题的靓处:1.逆向处理所给操作,将集合的拆分化为整合2.STL set的lower_bound()函数想法非原创,来自:http://blog.youkuaiyun.com/woshi250hua/article/details/7782875*/#include #include #include #include #include using namespace std;原创 2012-08-16 22:38:13 · 822 阅读 · 0 评论 -
Topcoder SRM552 Div1 500
int FoxAndFlowerShopDivOne::theMaxFlowers(vector flowers, int maxDiff){ const int NN=1000; int n=flowers.size(); int m=flowers[0].size(); int l[32][32],p[32][32]; int dpi[32][2000],dpj[32][2原创 2012-08-17 15:00:49 · 820 阅读 · 0 评论 -
HDOJ2448-最短路,KM匹配
#include #include #include #include using namespace std;const int NN=120;const int INF=0x3fffffff;struct node{ int v,w; node() {} node(int _v,int _w): v(_v),w(_w) {}};int n,m,l原创 2012-08-19 20:01:26 · 626 阅读 · 0 评论 -
POJ3740-精确覆盖,Dancing_links
位运算裸搜版(500ms):#include #include #include #define LL long longusing namespace std;const int N=32;const int L=10;LL w[L],goal[L],x[20][L];int m,n,a[20][320];inline bool cont(LL *x,LL *y原创 2012-08-18 12:30:15 · 1699 阅读 · 3 评论 -
POJ1084-重复覆盖,DLX
这题可理解为用最少用多少火柴棒覆盖全部的正方形,以正方形为列,火柴棒为行,重复覆盖模型明显。建图的时候要找出所有正方形所包含的火柴棒,我是这样找的:先确定最左上边的正方形(边长为1~n)所包含的边,因为对于等大的两个正方形,其相同位置的火柴棒边的标号的差是一定的,所以算出一个正方形的边根据差就能得出其他的等大的正方形的边了。/*第一道像样一点的DLX重复覆盖,这题数据弱~*/原创 2012-08-20 12:45:35 · 2015 阅读 · 0 评论 -
HDOJ2433-最短路径树
//1406ms险过。#include #include #include #include #include using namespace std;const int NN=110;const int MM=3100;struct node{ int v,e; node() {} node(int _v,int _e): v(_v),e(_e) {}原创 2012-08-21 17:35:21 · 749 阅读 · 0 评论 -
HDOJ3035平面图最小割转最短路
百万数量级的点呀好吓人~此题两种解法:(1)最大流,但明显点太多,肯定超时,不过明知道超时我也写了一遍~然后坐等TLE~(2)最短路,刚开始不知道还可以这么转化,搜了一下平面图最小割,看到下图后顿悟(虽然不知道原图干嘛的~),立马写最短路了,我个傻B一最短路就写spfa,一最短路就写spfa,也不分析分析~又TLE之后就又写了dijkstra了,2秒多过的。还有这题建图有点原创 2012-08-21 17:24:26 · 1885 阅读 · 3 评论 -
POJ2175-最小费用流消圈算法
#include #include #include #include #include using namespace std;const int NN=210;const int MM=100000;const int INF=0x3fffffff;inline int Abs(int x){ if (x>=0) return x; else原创 2012-08-23 19:44:44 · 2846 阅读 · 1 评论 -
POJ2912-并查集
这题是POJ1182食物链的升级版,先做那题,这题应该也没问题了。#include #include #include using namespace std;const int NN=550;const int MM=2100;int n,m;struct Rec{ int a,b,c; Rec() {} Rec(int _a,int _b,int原创 2012-08-15 20:35:45 · 1108 阅读 · 0 评论 -
HDOJ4362-决策单调的DP
易得此题DP方程: dp[i][j]=min{dp[i-1][k]+abs(x[i-1][k]-x[i][j])}+cost[i][j]; //1当x[i-1][k]当x[i-1][k]>x[i][j]时,dp[i][j]=min{dp[i-1][k]+x[i-1][k]}-x[i][j]+cost[i][j]; (2)(1)和(2)式中的min{}部分均与j无关,单调性明显。故原创 2012-08-16 12:23:14 · 653 阅读 · 0 评论 -
POJ1160-四边形不等式优化
/*第一个四边形不等式优化题(虽然数据量小,普通的dp即可秒过)写倒是好写,难在四边形不等式的证明上,不会证~待会看证明去~*/#include #include #include using namespace std;const int NN=310;const int INF=0x7fffffff;int n,m;int s[NN],dp[NN][NN],w[NN原创 2012-07-27 16:31:15 · 1493 阅读 · 0 评论 -
ZOJ3332-竞赛图中的哈密顿路
竞赛图:图中的任意两点间有且仅有一条有向弧连接求竞赛图中的哈密顿路的算法:首先,由数学归纳法可证竞赛图在n>=2时必存在哈密顿路;(1)n=2时显然;(2)假设n=k时,结论成立,哈密顿路为V1,V2,...,Vi,...,Vk; 现添加第k+1个结点,若存在弧和弧,则可得哈密顿回路V1,V2,...,Vi,Vk+1,Vi+1,...,Vk; 若不存在上述的原创 2012-08-13 11:44:39 · 6504 阅读 · 0 评论 -
HDOJ2888-裸二维RMQ
#include #include #include #include using namespace std;const int NN=301;int n,m,a[NN][NN],dp[NN][NN][9][9]; //内存卡得紧inline void get(int &x){ char c=getchar(); while (c'9') c=getchar原创 2012-08-14 14:22:07 · 976 阅读 · 0 评论 -
HDOJ3516-动态规划,四边形不等式优化
/*此题和石子合并很相似。DP方程: dp[i][j]=min{dp[i][k]+dp[k+1][j]+x[k+1]-x[i]+y[k]-y[j]}(i<=k<j)其中dp[i][j]表示合并i到j的点最小树枝长度根据题目的特点,对于点来说,只向左或向下合并,要知道的是i~j合并后生成新的一点,此点与i~j的合并方法无关,坐标一定为(x[i],y[j]),每次只能合并两个相邻的点,合原创 2012-07-28 09:50:09 · 859 阅读 · 0 评论 -
POJ3487-稳定婚姻系统
#include #include #include #include #include #include using namespace std;const int NN=128;const int INF=0x3fffffff;int n,cnt1,cnt2,hash[NN],tmpf[NN],cur[NN],num[NN],tag[NN],w[NN][NN];char原创 2012-07-29 12:18:26 · 2425 阅读 · 0 评论 -
POJ-1351裸DP
/*这个DP挺有意思的~偶本来是想找个记忆化搜索的题来做的(这题也能记忆化,不过下面这样更好写一些)抽象出模型后,应想到齿槽高度为1和4等价,2和3等价我的DP方程中f[i][j][flag1][flag2]的j表示的是第i个齿槽的高度为j,flag1表示的是前i个齿槽中是否出现过相邻的1和4,flag2表示的是前i个齿槽中是否出现过2或3,dp[i][flag1][flag2]表示的是到第原创 2012-07-29 22:24:44 · 1109 阅读 · 0 评论 -
POJ1182-并查集
这题有一个关键点: x的食物的食物以x为食,即生物间的关系是以3为循环的,就像运算 (0+1)%3=1,(1+1)%3=2,(2+1)%3=0,(0+1)%3=1... ...不管d=1还是d=2,都表示x与y有关系,因此可以并到一个并查集里去,然而具体的同类与捕食关系可用0,1,2来代表;这里以r[i]表示i与其并查集中父节点p[i]的关系: 0表示同类,1表示i吃p[i],2表是i被p原创 2012-08-14 17:39:12 · 862 阅读 · 0 评论 -
POJ2749-二分,2SAT
#include #include #include using namespace std;const int NN=1100;const int MM=4000000;const int INF=100000000;int n,a,b,diss;int d[NN],hate[NN][2],love[NN][2];struct Edge{ int v,next;原创 2012-08-01 10:10:24 · 735 阅读 · 0 评论 -
POJ1637-最大流判断混合图欧拉回路
#include #include #include #include #define NN 500#define MM 500000#define INF 0x7fffffffusing namespace std;int n,m,S,T,NV,sum;struct Edge{ int u,v,flow,next;} e[MM];int en,head[NN]原创 2012-07-31 14:30:31 · 5195 阅读 · 0 评论 -
HDOJ4328-最大子矩阵,悬线法
/*在我眼里,有好的算法模板代码来看学才是王道~此题没用单调队列(不熟,不知如何用是好),用的是悬线法求最大子矩阵学习此法大牛们都推荐王知昆的论文,小cai我也推荐下,另外也推荐多搜几个代码,找个好看的模仿模仿~*/#include #include #include using namespace std;const int NN=1002;int n,m,ans;原创 2012-08-01 20:19:01 · 2531 阅读 · 0 评论 -
HDOJ2828-DLX, 重复覆盖小变形
代码是昨天写的,今天又试着做重复覆盖的DLX,发现根本写不下,出现了重重错误,我还以为我昨天误打误撞的代码很优咧,太自以为是了!这道HDOJ2828也是好题,它比我今天试写的HDOJ3957简单得多,最大的不同不是一个只是求一个YES/NO,另一个求的是最小dfs深度,而是3957的链表数据中的关系比2828复杂,所以dance实现部分的思想都是不一样的~**尚未成功,菜鸟仍需努力~不想说re原创 2012-08-19 11:30:03 · 1008 阅读 · 0 评论 -
HDOJ3594-仙人掌图的判断
/*题意:给出一个有向图,判断该图是否为仙人掌图.这里有一个不错的关于仙人掌图性质分析文章: pdf:http://files.cnblogs.com/ambition/cactus_solution.pdf代码也是按照文章中的仙人掌图的3个性质来做的.*/#include #include #include using namespace std;const int原创 2012-08-24 15:51:16 · 3468 阅读 · 0 评论 -
2012年ACM征战总结
之前从没有写过总结,这次写个总结也是为了表来年决心啦。因为想起从前被叫大哥哥或学长的尴尬,先声明:本人是正正宗,娇滴滴(。。。)的长发齐刘海的妹子,细心的你肯定注意到了我的博客名是Wo xi Meiz(我是妹子之意)。尼玛,谁要再弄错,自掘双眼。//-----------------------------------------------------------------------原创 2012-11-14 23:30:30 · 2203 阅读 · 12 评论 -
几道黑书上的简单DP题
这几道经典的题本不应再由本菜啰嗦,无奈手痒总想贴点代码~POJ1141 括号的匹配dp[i][j]表示从i到j使括号匹配完整的最少需要添加的括号,有dp[i][i]=1;dp[i][j]=min(dp[i][k],[k+1][j]);当s[i]=='(',s[j]==')'或者s[i]=='[',s[j]==']'时,dp[i][j]=min(dp[i][j],dp[i+1][原创 2012-08-30 22:06:00 · 1104 阅读 · 0 评论 -
POJ3017-单调队列
/*交的时候没什么信心会AC,结果AC了,挺高兴的。如果之前能确定算法没问题,应该自信点~不熟练还是~题解:先得dp方程:f[i]=f[j]+max(x[j+1],x[j+2],...,x[i]),其中j<i,x[j+1]+x[j+2]+...+x[i]<=m;可以用n^2级的dp算法手工模拟一下,发现其中最优策略的规律,考虑m的影响,最值的区间范围等等,然后单调队列搞起~网路上的代码原创 2012-07-22 14:12:59 · 1864 阅读 · 1 评论 -
SGU194-带上下限的最大流基础
/*对于有流量上下限的无源的网络流的可行流转化为一般的有源汇点的最大流来做(1)添加超级源点S和超级汇点T(2)对于原有的边(u,v,l(u,v),c(u,v))(l为流量下限,c为流量上限),添加边(u,v,0,c-l);(3)对于每个结点i,记w[i]=sum(l(u,i))-sun(l(i,v)); 若w[i]>0,添加边(S,i,w[i]),若w[i]<0,添加边(i,T,-原创 2012-08-11 17:30:17 · 1776 阅读 · 0 评论 -
2013通化邀请赛的几题Hdu4494,Hdu4497,Hdu4498,Hdu4499
http://acm.hdu.edu.cn/showproblem.php?pid=4494最小路径覆盖。各种worker之间没有影响,一次建图,分别对求每种worker求一次费用流。#include #include #include #include #include using namespace std;const int N = 460;const int M =原创 2013-08-24 20:51:17 · 2747 阅读 · 4 评论 -
一般图最大匹配问题-带花树开花算法
以前用这个算法写过一两个水题,当时纯粹是套用模板,对算法本身是一知半解。然后Watashi的多校题中有个带花树模板题,现成的模板都套出了各种死循环,RE问题,弱爆了。这两天重新看了看论文和博客,重新理解了一遍,顺便把论文的前小半部分关于二分图最大匹配和一般图最大匹配的地方翻译了一下,论文的后半部分的二分图最大权匹配和一般图最大权匹配问题暂时还没看。论文地址:http://builtinclz.原创 2013-08-28 17:35:37 · 23423 阅读 · 8 评论 -
Hdu4759.Poker Shuffle
标签: 思维 模拟题意: 对于一副有2^n张牌的扑克, 标号1 ~ 2^n. 起初, 牌是有序的(1, 2, 3, 4, ...), 洗完一次牌后, 将变为(1, 3, 5, ..., 2^n - 1, 2, 4,..., 2^n) 或 (2, 4, ..., 2^n, 1, 3, 5, ..., 2^n - 1), 可以多次洗牌, 洗牌的规则总是如此反复. 现问的是, 给你n, a, x,原创 2013-09-28 20:15:09 · 1524 阅读 · 0 评论 -
POJ3648-2SAT解的求得
/*2SAT一个解的求得:推荐赵爽的2-SAT解法浅析论文*/#include #include #include #include #include #define NN 100#define MM 10000#define NONE 0#define RED 1#define BLUE -1using namespace std;int n,m;struct原创 2012-07-31 10:23:11 · 1592 阅读 · 1 评论 -
Hdu4582-DFS spanning tree VS Pku2152-Fire 一类平方级树形最小覆盖问题
/*题意:某国N个城市,之间树形交通网络。现要在一些城市建消防站,要求:每个城市i要 么有自己的消费站,要么离最近的有消费站的城市的距离不超过Di(各个城市的要求 不尽相同)。同时,各城市建消防站的费用Wi已知,也不尽相同。解法:树形动态规划。想到用DP来解题不难,难的是想出怎么来DP。对于状态的设计,我们 大概能猜到这个应该用的是二维的状态,其中一维表示D原创 2013-08-02 22:16:43 · 1360 阅读 · 0 评论 -
Hdu-2993斜率优化
/*这题是斜率优化的入门题浅谈数形结合在信息学竞赛中的应用中讲得很好,这是其中的例二;在此标记个人理解上觉得重要的地方;首先这题求max{(s[i]-s[j])/(i-j)}即看成求最大斜率...*/#include #include #include using namespace std;typedef long long LL;const int NN=100005;原创 2012-07-23 10:44:18 · 1134 阅读 · 5 评论 -
HDOJ4433-locker,2012ACM天津站C题,DP
被yobobobo的五十行代码给鄙视了!~写挫鸟~~dp[i][j]表示前i个数字中前i-2个数字已经调换好了,第i-1个数字x和第i个数字y满足x*10+y=j对应状态的最小操作数,代码如下:#include #include #include using namespace std;const int NN=1010;int r1[NN][NN],r2[NN][NN]原创 2012-10-28 20:06:21 · 1895 阅读 · 0 评论 -
HDOJ4115-Eliminate the Conflict,2SAT
每一局alice要么与Bob平手,要么赢Bob,二取一,为2SAT问题,而不是锤子剪刀布3SAT。对于m次要求,不管是same还是different,都分成三种情况,挺好想的2SAT。#include #include #include using namespace std;const int NN=25000;const int MM=100000;int n,m,en原创 2012-11-06 10:04:23 · 813 阅读 · 0 评论 -
HOJ2739-the Chinese Postman Problem
#include #include #include #include #include using namespace std;const int NN=250;const int MM=200000;const int INF=0x3fffffff;int n,m,en,sum,S,T,NV,head[NN],in[NN],out[NN];struct Edge{原创 2012-09-04 22:32:08 · 1083 阅读 · 0 评论 -
POJ2763-LCA在线算法+树状数组
#include #include #include #include #include using namespace std;const int NN=210000;int n,en,c[NN],head[NN];struct Edge{ int v,w,next; Edge() {} Edge(int _v,int _w,int _next): v原创 2012-08-28 11:25:26 · 1358 阅读 · 0 评论 -
HDOJ1426-DLX解sudoku
这是我做的第一个DLX解数独的题,建好模型就是解精确覆盖问题了,也不是很难,我不知道别人是怎么处理数独中原始的数据的,我的做法是先不管原有的的数建个729行*324列的十字双向链表,再处理掉原有的数字,再dance填空;郁闷的是由于未知的错误我查了好几遍,处理原有数据的方法也变了好几变,查不出来后只好重写dance部分才行~等下再比比看看到底出问题在哪儿了。#include #inc原创 2012-09-05 17:26:45 · 1042 阅读 · 0 评论