
HDU
文章平均质量分 66
Wall_F
这个作者很懒,什么都没留下…
展开
-
HDU 2013 杭州网络赛 1007 & HDU 4744 Starloop System
网赛开始10分钟后开始读这题,然后立马发现这是求循环流,这一题的做法是拆点后求在满足最大流的情况下的最小费用。。即要使得第i个每个城市属于wi个循环圈,把每个点拆成两个点,建立超级源点s,汇点t,对每个城市i来说s->i连wi的流量,费用为0的边。i+n->t,连wi的流量,费用为0的边。 城市与城市之间,i>j+n 连流量为1,费用为cost的边。跑最小费用最大流即可。最后判断最原创 2013-09-16 00:59:55 · 2247 阅读 · 0 评论 -
HDU 3468 Treasure Hunting
大意:你和iSea去寻宝,路上只能沿着A~Z||a~z的Rally最短路径走,路上你省下一分钟的时间去挖金子,也就是说只能挖一个金子,挖完后就不能再挖,问最多能挖多少金子。(输出保证是A~Z || a~z,要不没法做)思路:首先要确定这是什么问题,即金子只能挖一次,而且要使得挖得的金子最大化,显然这是最优化问题?如何去解决?以Rally和Gold分别为二部图的两部分建图,一个点只能连一条边原创 2013-05-29 19:58:02 · 2284 阅读 · 0 评论 -
HDU 3026 Chinese Chess
大意略。求大牛解答,二分图中如何判断关键边?除了暴力枚举之外的解法。#include #include #include #include #include #include #include #include #include #include using namespace std;const int maxn = 100000;const int max原创 2013-05-29 11:59:09 · 1743 阅读 · 0 评论 -
HDU 3078 Network
大意略。思路:通过LCA/RMQ可以找到LCA(u,v),通过记录预处理前驱fa的值,可以把u->v之间的所有顶点存下来,然后排一次序找到第K大值即可,如果size 给出LCA/RMQ代码。void DFS(int u, int dep){ vis[u] = 1; dfn[top] = dep; euler[top] = u; pos[u] = top; ++t原创 2013-05-23 11:37:14 · 1574 阅读 · 0 评论 -
Hdu 1010 Tempter of the Bone
大意略。思路:搜索题,需要剪枝。注意两个地方的剪枝:1、总时间T与当前时间的差与当前位置到终点的曼哈顿距离必须同奇同偶,这样才能保证在T时刻走到终点。2、总时间与当前时间的差必须小于当前位置到终点的曼哈顿距离,这样才能走到终点。3、空位置的个数包括终点必须大于总时间才行。#include #include #include #include #include原创 2013-03-24 12:08:43 · 754 阅读 · 0 评论 -
Hdu 2553 N皇后问题
大意略。位运算求N皇后问题是目前最快的求解N皇后问题解法之一。#include #include #include #include #include #include #include #include using namespace std;#define all (1<<n)-1int n;void dfs(int row, int ld, int rd,原创 2013-03-25 16:56:24 · 1000 阅读 · 0 评论 -
Hdu 3711 Binary Number
大意:给定两个数组A,B,让你求在二进制表示下,B中数变为A中数所需要的最小操作。思路:对每一个B中的数,枚举A中所有数,保存最小值即可,注意题目要求选A中最小的那个数,所以开始需要排序。位运算求操作数比较高效。#include #include #include #include #include #include #include #include using name原创 2013-03-23 21:29:27 · 1625 阅读 · 0 评论 -
HDU 1671 Phone List
#include #include #include #include #include #include #include #include #include #include using namespace std;const int maxnode = 10010 * 110;const int sigma_size = 26;st原创 2013-04-02 20:00:49 · 687 阅读 · 0 评论 -
Hdu 1878 欧拉回路
无向图的欧拉回路。#include #include #include #include #include #include using namespace std;const int maxn = 1010;int de[maxn];int p[maxn+1];int n, m;void init(){ for(int i = 1; i <= maxn; i原创 2013-03-17 11:37:57 · 704 阅读 · 0 评论 -
HDU 1698 Just a Hook
线段树成段更新。#include #include #include #include #include using namespace std;const int maxn = 1000010;const int INF = 0x3f3f3f3f;int n, m;int p, v;int y1, y2;int sumv[maxn<<2], minv[maxn<<原创 2013-03-07 20:29:45 · 933 阅读 · 0 评论 -
HDU 2521 反素数
为了了解,掌握反素数。#include #include #include #include #include using namespace std;int get_fac(int n){ int tot = 0; for(int i = 1; i <= n; i++) if(n % i == 0) tot++; return tot;}int main(){原创 2013-03-06 22:43:23 · 1029 阅读 · 0 评论 -
Hdu 2795 Billboard
大意:给定的board的长、宽以及公告的长、宽,问第ith广告在第几行。思路:把h看做区间,w看做长度即可,维护一个最大值,每次往最左边更新。#include #include #include #include #include using namespace std;const int maxn = 222222;int maxv[maxn<<2];int ql,原创 2013-02-19 18:53:55 · 591 阅读 · 0 评论 -
Hdu 1394 Minimum Inversion Number
大意:求一个序列的逆序数对数,然后把前i个元素移动到尾部去,然后求这些序列中最小的逆序数对数。思路:利用时效性来求逆序数对数,可以达到O(nlogn)的时间复杂度。#include #include #include #include #include using namespace std;const int maxn = 5100;int sum[maxn<<2];原创 2013-02-19 11:12:27 · 549 阅读 · 0 评论 -
Hdu 1754 I Hate It
大意略。线段树入门题。#include #include #include #include #include using namespace std;const int maxn = 222222;const int INF = 0x3f3f3f3f;int max(int a, int b){ return a > b? a : b;}int n, m原创 2013-02-18 21:20:23 · 550 阅读 · 0 评论 -
Hdu 1166 敌兵布阵
大意略。思路:线段树入门题。#include #include #include #include #include using namespace std;const int maxn = 50010;int sum[maxn<<2];int ql, qr;int p, v;int n;void pushup(int o){ sum[o] = sum[o*原创 2013-02-18 22:48:11 · 705 阅读 · 0 评论 -
Hdu 1075 What Are You Talking About
大意略。思路:练习练习map的使用,代码丑了点,但总算AC了, - -!~#include #include #include #include #include #include using namespace std;map Map;char s1[15], s2[15];char ans[50010];void solve(){ while(scanf(原创 2013-01-22 13:31:01 · 816 阅读 · 0 评论 -
Hdu 3292 No more tricks, Mr Nanguo
大意:求x^2-d*y^2 = 1的第K解。思路:佩尔方程的求解,我们知道佩尔方程有解的情况是d不是完全平方数,根据的佩尔方程的递推公式那么第K解就是:xn = [x1 dy1] ^n-1 x1yn = [y1 x1 ] y1我们知道了d、k,用矩阵快速幂算出xn-1,d*yn-1,然后分别于与x1和y1相乘即可。#inc原创 2013-01-09 19:12:16 · 751 阅读 · 0 评论 -
HDU 2448 Mining Station on the Sea
预处理轮船到各个港口的最短路径,然后KM解之即可。/*HDU 2448*/#include #include #include #include #include #include #include #include #include #include using namespace std;const int maxn = 310;const int INF =原创 2013-07-29 11:45:16 · 1006 阅读 · 0 评论 -
HDU 3722 Card Game
最大费用圈覆盖,转换成图的匹配来解之。/*HDU 3722*/#include #include #include #include #include #include #include #include #include #include #include using namespace std;const int maxn = 210;const int IN原创 2013-07-29 11:46:14 · 1159 阅读 · 0 评论 -
HDU 1394 Minimum Inversion Number
找以前的水题切,但是忘记以前怎么想的呢,TAT...于是乎重新推了一次,找到了新的规律,时间复杂度大概是O(nlogn)+O(n^2)+O(n);如果数据规模还大一点就TLE了。。。首先求出逆序对数,对于初始队列维护四个值:1、第一个值为左边比A[i]大的数Left[i];2、左边比A[i]小的数Left2[i];3、右边比A[i]大的数Right[i];4、第i个数A[i原创 2013-09-14 00:05:08 · 1165 阅读 · 0 评论 -
HDU 1496 Equations
学哈希表时的习题。H:a*x1^2+b*x2^2 = -(c*x3^2+d*x4^2),H关于X轴对称,由于会有负下标,我们把函数位置右移maxn,即H(x+maxn) = H(maxn-x),原函数关于X=maxn对称。所以我们可以先算出X右边的所有数,然后通过左边的数去映射右边的数,把所有可能解相加。因为x1,x2,x3,x4可以为正数或者为负数两种情况,所以在找到一种可能解时,需要把原创 2013-09-02 20:52:34 · 1184 阅读 · 0 评论 -
HDU 3081 Marriage Match II
一开始RE,然后枚举m,TLE了,然后有许多重边TLE。。还有HDU 3081 似乎最大流解法是错误的,目前还木有想到正解。渣代码略。。原创 2013-08-16 22:42:32 · 1070 阅读 · 0 评论 -
HDU 3395 Special Fish
以前通过KM来解的,今天用最大费用最大流写一次,结果发现WA。。 后来才发现有一种情况没有考虑到,即首先满足的应该是最大费用,而不是流。。。传送门#include #include #include #include #include #include #include #include #include #include using namespace std;c原创 2013-08-13 20:52:23 · 957 阅读 · 0 评论 -
HDU 4240 Route Redundancy
大意:在城市A->B之间通过所有路径一小时之内能通过最大的车辆(Maxflow)/所有边上通过最大车流量(cap)的那条叫做redundancy ratio。最小的redundancy ratio是前者最大的车流量的那一条(cap),问minimum redundancy ratio是多少。思路:一开始想通过每次找增广路径时去找出最小的残余量,然后再找最大的,后来发现是错误的。其实在沿着残余网原创 2013-08-12 15:47:39 · 1401 阅读 · 1 评论 -
HDU 2413 Against Mammoths
大意:地球人要占领喵星人的星球,给定地球战舰的初始值以及每年递增的速率,喵星人战舰初始值,以及每年递增的速率,求在一个最小的时间,在改时间内占领全部星球。(一个星球只能占领一个喵星球)思路:由最后一个条件知道二分匹配,然后二分差值即可,WA了几次,开始以为是数据在0-40000之内,后来发现可能很大,而且精度转换会有误差。#include #include #include #inc原创 2013-05-28 17:39:01 · 1498 阅读 · 2 评论 -
HDU 3416 Marriage Match IV
S->T流代表路径,在最短路树上的点连边既可,容量为1. 似乎题目保证有解。#include #include #include #include #include #include #include #include #include #include using namespace std;const int maxn = 1610;const int INF =原创 2013-08-15 21:49:16 · 1302 阅读 · 0 评论 -
HDU 2853 Assignment & HDU 3315 My Brute
两道的题型都是:给出现有的匹配,让你求匹配的权值最大时,改动的边数。方法就是把边上标记,上标记的方法就是把权值扩大比N大的一个倍数,比如说N:50,那么我们就扩大55倍,原来已经存在的匹配边权值再加1,就这样,无论有原有匹的匹配边有多少条,一定要小于55,但这样,又标记出了,求得ans/55时,这个值就是最大的匹配权值,ans%55就是没有改变的匹配边。/*HDU 2853*/#incl原创 2013-07-29 21:28:45 · 1324 阅读 · 0 评论 -
POJ 3686 The Windy's & HDU 3718 Similarity
KM两道。POJ 3686 建图很巧妙,注意建图的方式。/*POJ 3686*/#include #include #include #include #include #include #include #include #include #include using namespace std;const int maxn = 60*原创 2013-07-28 20:16:23 · 1215 阅读 · 0 评论 -
HDU 1853 Cyclic Tour & HDU 3488 Tour
大意:给定一个有向图,把图分成一些环,要求每个点只属于一个环,求满足条件的环所有边权和的最小值。对于满足条件的环,每个点的入度和出度均为1,我们可以把每个点拆成入点和出点,那么也就是说一个入点对应一个出点,一个出点对应一个入点。那么这个问题就变成了一个最佳匹配问题。原创 2013-07-28 20:43:57 · 883 阅读 · 0 评论 -
HDU 2282 Chocolate & HDU 2813 One fihgt one
两者都是求最小权匹配。通过这次练习发现一个问题,就是求最小权匹配时,最好把W的赋值为-INF。在做第二题时,出现两者之间没有连边的匹配到了一块,所以最好赋值为-INF。输出时,只加上已经匹配边的长度。即:for(int i = 1; i #include #include #include #include #include #include #include #includ原创 2013-07-27 17:36:58 · 928 阅读 · 0 评论 -
HDU 2255 奔小康赚大钱
测试。#include #include #include #include #include #include #include #include #include #include using namespace std;const int maxn = 310;const int INF = 0x3f3f3f3f;int n;int W[maxn][ma原创 2013-07-26 21:44:53 · 778 阅读 · 0 评论 -
HDU 3395 Special Fish
7月冒泡第4题。大意明白后很好写,注意初始化W的值。#include #include #include #include #include #include #include #include #include #include using namespace std;const int maxn = 110;const int INF = 0x3f3f3f3f原创 2013-07-27 16:08:09 · 775 阅读 · 0 评论 -
HDU 2426 Interesting Housing Problem
7月冒泡第5题。由于为负数的房间不能入住,所以不需要读入,而直接初始化为-INF.这是一个很重要的初始化。因为,如果不这样做的话,可能学生可以一一对应一些房间。那么当计算是否完备匹配时,是比较麻烦的。#include #include #include #include #include #include #include #include #include #inclu原创 2013-07-27 16:16:04 · 896 阅读 · 0 评论 -
HDU 1533 Going Home
7月冒泡第三题。#include #include #include #include #include #include #include #include #include #include using namespace std;const int maxn = 310;const int INF = 0x3f3f3f3f;int n, m;int W[原创 2013-07-26 23:23:55 · 762 阅读 · 0 评论 -
HDU 3523 Image copy detection & POJ 2516
2道KM。HDU 3523题目长了点,POJ 2516 需要拆点来做KM。/*HDU 3523*/#include #include #include #include #include #include #include #include #include #include #include using namespace std;co原创 2013-07-31 10:48:11 · 1219 阅读 · 0 评论 -
Hdu 1788 Chinese remainder theorem again
大意不再赘述。思路:其实是最小公倍数。N+a ≡ 0 (mod Mi),求得lcm之后减去a即可。#include #include #include #include using namespace std;typedef __int64 LL; //long long WAconst int MAXN = 110;int n;LL lcm, a;LL gc原创 2013-01-07 19:22:41 · 1009 阅读 · 0 评论 -
Hdu 3579 Hello Kiki
大意不再赘述。思路:一元同余方程组的解,可以通过两两合并来求解,注意当最后的结果时需要特判,该结果为A数组的最小公倍数,其余的合并求解即可。#include #include #include #include using namespace std;typedef long long LL;int n;int times;const int MAXN = 101原创 2013-01-07 13:13:34 · 1334 阅读 · 0 评论 -
Hdu 2602 Bone Collector
大意不再赘述。思路:之所以再写一次这个题目是因为对这题有了更深的理解,而且找出了以前的一些BUG和理念上的错误,其中完全背包与0/1背包的区别,优化成滚动数组以及为什么可以优化成滚动数组,它的逆序循环,“阶段”的划分,而且在规划方向的选取上都有了较大的进步。#include #include #include #include #include using namespace原创 2012-12-06 22:47:51 · 556 阅读 · 0 评论 -
Hdu 1114 Piggy-Bank
大意不再赘述。思路:虽然说是完全背包,但感觉和DAG上固定终点的最短路差不多,只不过“面值只和恰为S”改成了“体积之和不超过C”,另外增加了一个新的属性---重量,把原来的无权图变成了带权图。这样,问题就变成了以C为起点,终点为0的、边权之和最小的路径,同样可以用动归递推的方式求解。而且我们可以选择是否打印路径(字典序),唔,与0/1背包的联系与区别,个人感觉0/1背包选用滚动数组优化的话原创 2012-12-06 21:34:29 · 609 阅读 · 0 评论 -
Hdu 3790 最短路径问题
大意不再赘述。思路:挺简单的一道题,开始我是想保存一个节点的前驱节点,然后判断当最短路相等时再判断cost[fa[y]][y] 与cost[x][y]的大小,然后用tot加上它,后来WA。细想一下,原来它们以前的tot可能不相等,即我们必须以节点为单位保存一个节点在最短路上的最小费用,这样才能保证求出正确的结果。顺便贴下以前关键的代码。AC CODE#include #include原创 2012-11-22 21:24:10 · 784 阅读 · 0 评论