- 博客(36)
- 收藏
- 关注
原创 ZOJ2676 Network Wars
此题是0-1分式规划+最大流,大意是给定n个点m条边求一个割让这个割中的全部边权除以边数最小,设x 为当前图中依据题意得到的割G(S, T)的最优结果,则x = Sigma (S)/C, C为当前S割中边数和,然后移项可得x*C - Sigma (S) == 0,令g(x) =
2011-07-31 17:58:56 787
原创 poj1149 PIGS
记得某位大牛说过网络流如果建模都是别人告诉你的,那么这个题目就废了。。。ORZ。。以后关于网络流就只说建模方法吧题目大意是给你M个猪舍,N个买猪的人,每个人有k把钥匙可以打开k个不同的猪舍,每个人要买一定数量的猪,买完后,此次打开的猪舍里的猪可以相互流动建立新的源点和
2011-07-31 16:33:31 584
原创 poj1273 Drainage Ditches
基础的网络最大流。。。Edmonds-Karp算法飘过。。。#include #include using namespace std;struct node{ int num, value; };const int size = 210;int ma
2011-07-24 10:12:21 473
原创 poj1135 Domino Effect
这题之前以为就是找一条最长路径然后比较最长路径节点a和a相邻节点j,通过公式(dist[a]+dist[j]+mapp[a][j])算出的最大值就可以了然后发现样例数据中出现了正权回路,那果断会陷入死循环,这样搞得我的思路也陷入死循环了,后来偶然间瞟见某大牛博客上说其实是单源最短
2011-07-23 20:04:53 858
原创 hdu3861 The King’s Problem
hdu终于开服了,这题果断AC,题目大意国王要给城市划分州,要求是如果互相联通的要画在一个州,并且相连两个州之间不能有城市,可以想到是强连通+最小路径覆盖,然后就比较好求解了,注意这里数组要开到100000+不然会WA(之前比赛开5100WA了N次。。血泪史啊。。。)
2011-07-21 19:59:56 1206
原创 poj1125 Stockbroker Grapevine
水题,FLOYD0ms过掉,题目大意是说给你n个人可以联系的人和联系他们需要花费的时间,你求出把所有人都联系到的最少花费时间,显然要用floyd求出每一个人对其他人的最少花费,然后求出每一行中最大的值,在这些最大值中取一个最小的就可以了,记得处理i==j的情况,居然没能1Y,杯具
2011-07-21 16:48:43 526
原创 poj1201 Intervals(差分约束)
差分约束第一题,差分约束就是解一系列的形如x1-x2=)a的不等式,由于移项之后为x1=)x2+a和最短路径的dist[i] ) dist[u] + mapp[u][i]联系 起来,故可以用最短路bellmanford和SPFA求解显然dist[i]和dist[u]都为方程的
2011-07-21 15:15:25 717 3
原创 hdu3832 Earth Hour
实际上此题是求最少用多少个点可以覆盖掉1、2、3这三个点,也就是一个覆盖的问题,求最少的灯数覆盖掉1、2、3,那么我们可以依照最短路径SPFA求法,首先建立模型,显然mapp[i][j]表示第i盏灯和第j盏灯是否相交或者相切,是则赋值为1,否则为0,然后SPFA三次判断1、2、3
2011-07-19 20:04:11 751
原创 poj1094 Sorting It All Out
一道有点猥琐的拓扑题,之前对于输出样例的数字有点不太理解,后来明白是推到给定的第几组输入可以唯一确定一个拓扑的结果(唯一、没有、还是有回路),那么就需要我们输入一条边处理一条边,每对一次输入拓扑之后要记得把入度加回去在最后附上测试数据供各位查找错误#include #includ
2011-07-19 09:08:16 1552
原创 POJ图论题集(无思路版)
1062* 昂贵的聘礼 1087* A Plug for UNIX 1094 Sorting It All Out 1112* Team Them Up! 1125 Stockbroker Grapevine 1135 Domino Effect 1149
2011-07-18 14:35:01 919
原创 poj1062 昂贵的聘礼
做这题代价确实很昂贵,从昨天晚上一直到今天上午都在debug,今天上午提交还出现各种WA。。。比较明显的最短路,有几个地方要注意一下,首先建图有个地方要注意以下,这题是用临界矩阵存储的有向图,而且是由交换品指向购买品,然后将虚节点设为购买品的价值,最后枚举每一个可能地位区间di求
2011-07-18 10:04:54 1505
原创 hdu2255 奔小康赚大钱
KM,最大带权二分匹配#include #include #include using namespace std;const int maxn=310,OO=INT_MAX;int w[maxn][maxn];int lx[maxn],ly[maxn];int linky[ma
2011-07-17 19:17:00 675
原创 hdu3478 Catch
首先可以推断出图要是联通的并且要有奇数条边的回路才能输出YES,因为从一个点开始沿着一个环分别向左右两个方向遍历,只有当前环的结点数为奇数的时候左右两个方向到同一个点是一奇一偶的,这样就说明存在某一时刻可以让贼出现在各个位置,因为这个点奇偶都可达,那么只需要进行一次BFS并且01
2011-07-17 14:04:33 1135
原创 POJ图论题集
1062* 昂贵的聘礼 枚举等级限制+dijkstra1087* A Plug for UNIX 2分匹配1094 Sorting It All Out floyd 或 拓扑1112* Team Them Up! 2分图染色+DP1125 Stockbroker Grapevin
2011-07-17 10:11:24 1247
原创 poj2553 The Bottom of a Graph
题意一开始理解有点小问题,题目大意是说如果一个点v能够到达w并且w也能到v则w和v都称为一个sink,题目要求从大到小输出图中所有的sink点,可能有人会对第二组数据不太理解,看一下这个图 显然1有一条边连接到2,如果1是sink点则2也要能够走到1,显然2是sink点因为它没有
2011-07-17 10:03:09 1026
原创 hdu2544 最短路(SPFA算法)
SPFA算法,留个爪 #include #include using namespace std;const int eps = 1000000;const int size = 110;int maze[size][size];int n, m;int dist[size];i
2011-07-16 20:27:26 631
原创 poj2186 Popular Cows
题目很短,大意是给你牛和牛之间相互仰慕的状况,如果A仰慕B,B仰慕C则A必定仰慕C,要求输出被所有牛仰慕的牛有多少。首先题目要求的牛要被所有的牛仰慕,那显然必须构成一个联通图那么每一个点都要有入度或者出度,考虑这种情况:如果某只牛没有出度,那么就意味着他不仰慕别的牛只是被别人仰慕
2011-07-16 11:19:19 498
原创 hdu2819 Swap
就是简单的二分匹配,行和列匹配就可以了,关键是点不在于匹配而在于排序,因为匹配后的match存储的是列的匹配对象,所以只需要把列从小到大(或者从大到小,因为是special judge,所以主副对角线都是一样)排序,每排序一次就保存当前交换了的下标,注意这里不能用冒泡而最好用选择
2011-07-15 16:28:57 1080
原创 poj1661Help Jimmy
从下向上倒推,dp[i][0]表示从第j块板子到第i块板子的左边的最小路程,dp[i][1]表示从第j块板子到第i块板子的右边的最小路程,先从小到大给板子排序,如果当前第i块板子下面有第j块板子的话,则比较从当前 第j块板子的左右分别到第i块板子的左右最小路程有点细节要注意
2011-07-14 21:39:32 575
原创 poj1661 Word Puzzles
对输入的单词建树要比先对文本建树快很多前者是O(n*n*8),后者是(n*n*n*8),由于数据范围很大,单独对文本建树是过不了的,之前还想过建立八个方向的字典树,但是还是差不多的结果,所以对单词建树比较好简单题,就不加注释了 #include using namespace
2011-07-12 19:08:41 423
原创 poj1678 I Love this Game!
其他的已经加了注释,现在重点解析一下 dp[i] = num[i] - maxx;这句话的意义,首先dp[i]表示的是当前我取第i个,而下一个人取第j个数(num[j]>num[i])可以达到最优,那么为什么要取最大的dp[j]呢?因为这样可以保证每次取得的策略最优,dp[j]是
2011-07-11 16:51:44 746
原创 状态压缩DP入门题
在n*n(n≤20)的方格棋盘上放置n 个车(可以攻击所在行、列),求使它们不能互相攻击的方案总数。仅供和我一样的菜鸟们参考, 以n=4为例子解析源码#include #include using namespace std;__int64 a[110
2011-07-11 09:48:02 2375
原创 hdu1025 Constructing Roads In JGShining's Kingdom
最近准备开始重拾DP,此题本质是求最长上升子序列,用a[u]=v表示当前第u个贫穷的城市对应的对面第v个富裕的城市,然后dp[i]表示当前长度为i时的最小a[k]值,为什么是最小呢?因为只有这样才能保证上升序列达到最长长度,只有尽可能的将dp[len]的值变小才能加入更多的a[i
2011-07-10 21:03:42 737
原创 hdu1272 小希的迷宫
昨天挂了场比赛,发现好久没写并查集都生疏了,今天就又拿了道之前的老题目来做了下, 题目不难,要注意的地方都加了注释,如果有错误欢迎大牛指正#include using namespace std;const int size = 100100;int root[size];int
2011-07-10 11:08:30 430
原创 hdu1264 Counting Squares(线段树+离散化)
用线段树+离散化做hdu1264比单纯的离散化更为复杂,但是适用范围也更广,今天看这个看得头都晕了,还是有点细节没有处理好,暂时归类到sloving中,明天再继续研究吧,不是AC代码大意是离散化所有的x线段,然后将所有的y坐标打成一棵线段树,那么每次遍历到一个x[i-1],x[i
2011-07-09 16:07:39 869
原创 hdu1542 Atlantis
离散化的题目,和之前的大同小异 #include using namespace std;const int size = 110;double x[2*size], y[2*size];double ax[size], bx[size], ay[size], by[size];
2011-07-09 14:49:28 740
原创 hdu1698 Just a Hook
又是一道线段树的题目,题目大意就是给你线段[a, b]和一个价值c,那么[a, b]这条线段的值就是c,现在求整个线段的价值。因为每条线段的价值可能会被后面更小的区间价值覆盖,所以这就是很明显的线段树。一开始以为这题很水,因为只需要把每一个单位长度的线段值累加直到求出[1, to
2011-07-09 10:34:24 607
原创 hdu1199Color the Ball
#include using namespace std;const int size = 2100;struct Node{ int x, y; bool is_white;}a[size];bool cmp(Node a, Node b)
2011-07-07 13:42:21 647
原创 hdu1264Counting Squares
也是离散化的题目,和之前的画墙如出一辙,据说可以用线段树+离散化。。。以后要试一下#include using namespace std;const int size = 1100;int x[2*size], y[2*size];int ax[size], bx[size],
2011-07-07 13:02:38 528
原创 hdu1541 Stars
这是一道可以用线段树做的题目,题目大意是计算某一刻星星坐标左下方的星星数(自己没有被包括),很明显的线段树,由于输入数据已经保证y坐标是按照递增顺序输出的,那么可以对每一个y,将其x打成一棵线段树,然后依次找出[0,x[i]]之间的cover值就可以了,要注意一下是先计算当前x[
2011-07-07 10:19:09 1798
原创 hdu1543 Paint the Wall
表示之前对离散化只是耳闻而已。。。今天看了一下感觉是用映射来实现。然后百度知道此题是用离散化+二分来实现
2011-07-06 16:36:12 716
原创 hdu1556 color the ball
很早以前就看过线段树相关内容,但是感觉学得并不扎实,现在重新看下果然发现了很多问题,这题是属于线段树的入门题,帮助我很好的理解了线段树,时间上还待优化 #include using namespace std;const int size = 100000;s
2011-07-06 12:51:38 610
原创 hdu2896 病毒侵袭
刚刚看完AC自动两天就发现了这道自动机的题目,这题不是很难,但是有几个细节需要注意一下,首先网站中的病毒类型不能重复,也就是说没有可能出现两个同样的病毒,我的处理方法是利用set这样的话判重和排序都省了,其次输出的网站编号和最终的病毒网站数不是一样的(我就是卡
2011-07-06 09:30:33 805
原创 hdu1671 Phone List
这个题目可以用两种方法:首先都是将电话号码打成字典树,然后第一种方法就是记录下每次输入的号码,然后另外从头到尾将每一个电话号码都进行查找,看是否有前缀存在,这种方法无论从时间、空间都不优化,第二种方法相对好点,建树之时标记一下当前节点的下一个节点是否存在(当前
2011-07-05 16:22:48 408
原创 hdu1298 T9
基于字典树的广搜,将所有给定的单词打成一棵字典树,然后从根开始广搜其每一个节点,用优先队列弹出当前长度下最大优先级的字母。#include #include using namespace std;const int size = 26;struct Trie
2011-07-05 14:35:29 632
原创 hdu2222 Keywords Search
这题是简单的AC自动机,非常基础的自动机入门题,已经加上了个人对代码的注释,欢迎各位给予指正和修改。。。#include using namespace std;const int size = 26;struct node{ int count;
2011-07-04 22:27:34 470
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人