自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Wall_F的专栏

这家伙很懒,他正在思考。

  • 博客(320)
  • 收藏
  • 关注

原创 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 2208

原创 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 1087

原创 LCA(最近公共祖先)算法的理解。

第一次用matlab画的图,好丑额。

2013-09-06 20:29:35 1495

原创 二叉排序树

学习二叉排序树时写的代码。二叉排序树是一颗动态,是在动态的过程中生成的,不是一成不变的。特点是:根节点左边的比根节点的值小,右边的值比根节点大,平均查找复杂度为O(log2*n);用二维指针来建树,注意new node(),返回的是结构体指针。#include #include #include #include #include #include #inc

2013-09-05 16:28:58 1132

原创 高级数据结构书籍 第二章

问题:新单词接龙。规则:(1)单词变换:单词Wi添加一个字母,删除一个字母或修改一个字母可以得到单词Wi+1;(2)字典序接龙:W1,W2,W3....Wn,满足字典序。将所有单词存在hash表或者Trie树中,然后判断一个单词能否通过变换得到另一个单词,如果能够,则连边。得到的是一个DAG图,做图上最长路径即可。#include #include #include #i

2013-09-03 21:12:43 1001

原创 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 1109

原创 UVA 11248 Frequency Hopping

开始最大流判断容量是否大于C,如果不大于,然后去找最小割中的弧,枚举容量为C,TLE。因为最小割中的弧增加的容量一定会引起最大流的增加,于是我们可以再原有最大流的基础上枚举最小割容量中的弧,然后判断是否大于等于C即可。楼主渣代码。#include #include #include #include #include #include #include #include #

2013-08-17 11:01:40 1111

原创 HDU 3081 Marriage Match II

一开始RE,然后枚举m,TLE了,然后有许多重边TLE。。还有HDU 3081 似乎最大流解法是错误的,目前还木有想到正解。渣代码略。。

2013-08-16 22:42:32 1034

原创 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 1267

原创 POJ 2135 Farm tour

一般的方法大家都知道,把无向边拆成有向边,超级源点向源点加一条流量为2,费用为0,超级汇点类似。但是有个问题需要注意,如何保证拆边之后的路径一定是最优的呢?比如说如下图:a-ba-cb-cc-d可不可以走a->b->a->c->d呢?当然可以,但是由于拆边之后没有负费用,我们肯定能找到一条更优的路径。比如说a->c->d。由于是最小费用,所以通过这样的方法就保证了不会走

2013-08-15 10:15:27 972

原创 POJ 1087 A Plug for UNIX

可以传递闭包之后做二分匹配,也可以直接最大流。。。。

2013-08-14 15:39:39 939

原创 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 889

原创 HDU 4240 Route Redundancy

大意:在城市A->B之间通过所有路径一小时之内能通过最大的车辆(Maxflow)/所有边上通过最大车流量(cap)的那条叫做redundancy ratio。最小的redundancy ratio是前者最大的车流量的那一条(cap),问minimum redundancy ratio是多少。思路:一开始想通过每次找增广路径时去找出最小的残余量,然后再找最大的,后来发现是错误的。其实在沿着残余网

2013-08-12 15:47:39 1341 1

原创 POJ 2446 Chessboard

经典的奇偶建图,这个模型有必要记一下。网络流过了。#include #include #include #include #include #include #include #include #include #include using namespace std;const int maxn = 40*40;const int INF = 0x3f3f3f3

2013-08-11 11:53:42 901

原创 POJ 2195 Going Home

测试模板。#include #include #include #include #include #include #include #include #include #include using namespace std;const int maxn = 1010;const int INF = 0x3f3f3f3f;struct Edge{ int

2013-08-10 15:35:00 833

原创 UVA 10735 Euler Circuit

大意 混合图中找欧拉回路思路 混合图中判断是否存在欧拉回路的方法都是一样,只是如何去找欧拉回路的问题。如何去找欧拉回路,满流后,如果图中已给出的无向边(e.cap > 0)有流流过,则把该边反向,如果没有,则不改,然后用套圈算法去找欧拉回路。/*UVA 10735*/#include #include #include #include #include #in

2013-08-09 17:39:21 1506

原创 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 1156

原创 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 1281

原创 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 1070

原创 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 962

原创 HDU 3435 A new Graph Game

同HDU 1853 & 3488,最小费用圈覆盖。只不过这一次是无向边,所以在建图时建立双向边即可。图的完备匹配实际上就是n个环的并。/*HDU 1853*/#include #include #include #include #include #include #include #include #include #include using namespac

2013-07-28 21:08:35 928

原创 HDU 1853 Cyclic Tour & HDU 3488 Tour

大意:给定一个有向图,把图分成一些环,要求每个点只属于一个环,求满足条件的环所有边权和的最小值。对于满足条件的环,每个点的入度和出度均为1,我们可以把每个点拆成入点和出点,那么也就是说一个入点对应一个出点,一个出点对应一个入点。那么这个问题就变成了一个最佳匹配问题。

2013-07-28 20:43:57 851

原创 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 1161

原创 POJ 2400 Supervisor, Supervisee

精度问题卡死我了。如果直接在括号里加-1.0*ans/(2*n)的话,被WA,而要转换为正数之后才可以AC。可能是POJ编译器的问题吧。#include #include #include #include #include #include #include #include #include #include using namespace st

2013-07-28 15:37:14 813

原创 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 885

原创 HDU 2426 Interesting Housing Problem

7月冒泡第5题。由于为负数的房间不能入住,所以不需要读入,而直接初始化为-INF.这是一个很重要的初始化。因为,如果不这样做的话,可能学生可以一一对应一些房间。那么当计算是否完备匹配时,是比较麻烦的。#include #include #include #include #include #include #include #include #include #inclu

2013-07-27 16:16:04 849

原创 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 733

原创 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 720

原创 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 735

原创 LA 4043 Ants

大意略。二分图最佳匹配,KM算法。#include #include #include #include #include #include #include #include #include #include using namespace std;const int maxn = 110;const int INF = 0x3f3f3f3f;const d

2013-07-26 21:18:02 920

原创 POJ 2724 Purifying Machine

大意:给定感染的物品(二进制)表示,一次操作可以消去一个物品,如果两个物品的二进制相差一位的话,那么可以一次消去两个,问最少多少次消去。思路:通过最大匹配求节省的次数(ans/2),然后用点集数减去已消去的物品数加上以前的操作数ans/2即可,res = ans/2, res += nx-ans;给出建图的代码:int check(int a, int b) //相差一位 { in

2013-06-03 15:39:06 1269

原创 POJ 3687 Labeling Balls

大意略。思路:把指向关系变一下,即A->B代表A重量一定比B重要要大。然后拓扑时,从编号最大的开始寻找即可。#include #include #include #include #include #include #include #include #include #include using namespace std;const int maxn = 210

2013-06-01 08:54:25 776

原创 HDU 3468 Treasure Hunting

大意:你和iSea去寻宝,路上只能沿着A~Z||a~z的Rally最短路径走,路上你省下一分钟的时间去挖金子,也就是说只能挖一个金子,挖完后就不能再挖,问最多能挖多少金子。(输出保证是A~Z || a~z,要不没法做)思路:首先要确定这是什么问题,即金子只能挖一次,而且要使得挖得的金子最大化,显然这是最优化问题?如何去解决?以Rally和Gold分别为二部图的两部分建图,一个点只能连一条边

2013-05-29 19:58:02 2208

原创 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 1675

原创 HDU 2413 Against Mammoths

大意:地球人要占领喵星人的星球,给定地球战舰的初始值以及每年递增的速率,喵星人战舰初始值,以及每年递增的速率,求在一个最小的时间,在改时间内占领全部星球。(一个星球只能占领一个喵星球)思路:由最后一个条件知道二分匹配,然后二分差值即可,WA了几次,开始以为是数据在0-40000之内,后来发现可能很大,而且精度转换会有误差。#include #include #include #inc

2013-05-28 17:39:01 1437 2

原创 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 1519

原创 2013.5.20

趁着这个机会大家赶紧给喜欢的TA表白吧!~祝程序猿们快快结束单身~在此我送上我最诚挚的祝福。2013.5.20

2013-05-20 15:51:54 817

原创 POJ 1375 Intervals

大意略。思路:过定点求得与圆的夹角,然后得到切线方向向量,该切线与x轴的交点就是阴影的端点了,然后求不连续区间即可。/*圆求切线;与直线的交点*/#include #include #include #include #include #include #include #include #include #include using names

2013-04-24 09:31:37 1102 2

原创 POJ 2354 Titanic

大意:给定经度、纬度,求两点之间的距离。思路:将点的经度、纬度转换为三维坐标,然后求得A-B弧所对弦长,求得圆心角,乘以半径就是弧长了。其中,North, East的经纬度我规定>0,South, West 这一题的精度要求非常BT,我是去网上下测试数据,然后暴力对拍才知道哪错了的,实际上是精确到小数点后3位。附上我错的二组测试数据。题外话:与昊哥抽题看谁A得快,结果尼玛比我快

2013-04-23 22:53:11 1015

原创 ACM题目分类

网络流http://www.cnblogs.com/AbandonZHANG/archive/2012/08/04/2622813.html计算几何http://www.cppblog.com/Felicia/category/4905.html?Show=All 转载自:http://www.cnblogs.com/AbandonZHANG

2013-04-16 19:14:24 1012

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除