自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 收藏
  • 关注

转载 netflow

浅谈网络流的基本算法 [转] 引言  过去听起来高深莫测的网络流算法,现在已飞入寻常百姓家了,对于每一个OIER,网络流是一个神圣的东西(个人见解),但神圣的同时,它并不是那样抽象,最形象的模型就是水流,从长江源点无限的向外流水,而大海(汇点)则在不断地‘喝水’,当然,你也可以不把它想成水,或者是其他一切可以流动的东西。而事实上,有些东西的流动比较流畅,而某些东

2012-08-31 16:43:26 1803 1

原创 poj 3275

题目大意:FJ想按照奶牛产奶的能力给她们排序。现在已知有N头奶牛(1 ≤ N ≤ 1,000)。FJ通过比较,已经知道了M(1 ≤ M ≤ 10,000)对相对关系。每一对关系表示为“X Y”,意指X的产奶能力强于Y。现在FJ想要知道,他至少还要调查多少对关系才能完成整个排序。首先把问题解释清楚,这里的“调查多少对关系”是不看中间结果的。也就是说,调查完确定的某些关系之后,无论结果是什么,排序

2012-08-30 16:17:55 1378

原创 hdu(4005)floyd

给出没两点之间的最短距离,问合法还是不合法,合法请输出原图中最少加的边数。#include #include #include #define MAXN 110int Q[MAXN][MAXN];unsigned char flag[MAXN][MAXN];enum boolean { FALSE,TRUE};int N;int main(){ int T,CE;

2012-08-29 16:26:02 619

原创 无向图的割边,双连通||有向图的强连通,割边

有向图:void tarjan(int u) { dfn[u]=low[u]=tmp; tmp++; vis[u]=1; mystack.push(u); for(int i=0;i<mp[u].size();i++) { int v=mp[u][i]; if(!dfn[v]) {

2012-08-29 14:41:39 2015

原创 hdu 4005

题意:有一幅图,现在要加一条边,加边之后要你删除一条边,使图不连通,费用为边的费用,要你求的是删除的边的最小值的最大值(每次都可以删除一条边,选最小的删除,这些最小中的最大就为答案)首先要进行缩点,把图缩为一棵树,因此,加入一条边后图就会存在一个环,环中的任何一条边删除后都不会导致图不连通之后找一条最小的边,可以说这条边肯定是在加边之后的连通块里的,因为如果不在连通块里,那就直接可以把

2012-08-29 05:08:15 1345

原创 hdu(4009)最小树形图自己建立root

题意:有n个地方需要供水,每个地方都可以选择是自己挖井,还是从别的地方引水,根据方法不同和每个地方的坐标不同,花费也不同,现在给出每个地方的坐标,花费的计算方法,以及每个地方可以给哪些地方供水(即对方可以从这里引水),求给所有地方供水的最小花费。思路:建立一个源点,到每个点的距离为自己打井的费用,其他的按条件建边。根据poj3164改过来的。#include #include #i

2012-08-28 13:24:25 575

原创 hdu(4007)正方形能框住最大的点数

暴搞呗。。。#include #include #include #include #include #include #include #define inf 1000300000using namespace std;const int N=1093;struct Node{ int x,y;}point[N];int n,R;

2012-08-27 16:31:35 855

原创 hdu(4006)优先队列求第K大的数

#include #include #include #include #include using namespace std;int main(){ int n,k; while(scanf("%d %d",&n,&k) == 2) { priority_queue,greater > Q;//min-->max for(i

2012-08-27 16:26:16 1848

原创 最小树形图 模板(poj3164)

链接:http://hi.baidu.com/bin183/blog/item/45c37950ece4475f1138c273.html有固定根的最小树形图求法O(VE):首先消除自环,显然自环不在最小树形图中。然后判定是否存在最小树形图,以根为起点DFS一遍即可。之后进行以下步骤。设cost为最小树形图总权值。0.置cost=0。1.求最短弧集合Ao (一条弧就是一条有

2012-08-26 21:28:26 2011

原创 poj (3468)线段树lazy操作

题意: 区间每个数加上一个数,询问一个区间之和.#include #include #include #include #include #include #include #include #include #define LL long long#define ls rt<<1#define rs rt<<1|1#define lson L,

2012-08-26 16:25:53 1033

原创 poj 3439(dij最短路)

题意太、蛋了。。。。给你一个服务器,服务器有两条电线,电线长度给你了,墙上有好多个插座,问你从插座A移动到插座B最少要几步(移动的时候,服务器不能断电,也就是,至少有一条电线连着插座,服务器可以任意动)。#include #include #include #include #include #include #include #include #inclu

2012-08-26 14:16:53 794

原创 输入优化

int in() { char ch; int a = 0; while((ch = getchar()) == ' ' || ch == '\n'); a += ch - '0'; while((ch = getchar()) != ' ' && ch != '\n') { a *= 10;

2012-08-26 13:56:29 860

原创 poj (3343)二分匹配+二分

题意:n个人类星球和m个外星人星球,每个星球(包括外星人的)都有一个初始的飞船数sh1[i],还有一个每年生产的飞船数p[i],还有一个n*m的矩阵d,d[i,j]表示从人类星球i到外星人星球j的年数(..年啊),当一个人类星球i可以击败一个外星人星球j的唯一条件是在出发年数ye,(ye-d[i,j])*p[i]+sh1[i]>=ye*p[j]+sh1[j] 的时候,人类星球i可以击败外星球j

2012-08-26 12:00:22 753

原创 poj 3311(状态压缩DP的最短路径)

题意:给一个起点和终点相同的图,一个矩阵表示各个点之间的距离,求经过所有的点,回到原点的最下路径,点可以重复走。#include #include #include #include #define inf 100000000using namespace std;const int N=12;const int M=1e5;int dis[N][N];int dp[M][N

2012-08-26 10:17:44 1940

原创 poj 3328(spfa)多终点多起点的最短路

#include#include#include#include #includeusing namespace std;int n,m;int map[65][35];int sx[65],sy[35];//起点int end[65][35];//终点int top;int d[2][65][35];//d[i][j][k]左脚(0)或右脚(1)踏进i行j列的最小时间

2012-08-24 21:55:21 1869

原创 hdu (4396:多校第十场):又见spfa求各种状态的最短路

本题题意:为找到至少走K条边的最短路。#include #include #include #include #include #include #include #include #include #include #define inf 1<<30using namespace std;const int N=5050;struct Node{ int v

2012-08-24 13:26:31 867

原创 poj 3067(树状数组求逆序对)

题意:日本岛东海岸与西海岸分别有N和M个城市,现在修高速公路连接东西海岸的城市,求交点个数。做法:记每条告诉公路为(x,y), 即东岸的第x个城市与西岸的第y个城市修一条路。当两条路有交点时,满足(x1-x2)*(y1-y2) 上面说的可能有点难理解,详细说明如下。记第i条边的端点分别为xi,yi。由于x是从小到大排序的,假设当前我们在处理第k条边,那么第1~k-1条边的x

2012-08-22 14:50:48 5310 1

原创 hdu 4389:打巨表

题意  :一个数能被他各个位数之和整除则符合要求,给L,R,问区间里有多少个数符合要求。即使你不会DP,也可以分段打表,比如10w为一个区间,统计这有多少个符合要求,然后对于一个数,先判断在哪个区间,再把之前的求和,对所在的区间暴力搜。记得打表用的函数:freopen("E:\\out.txt","w",stdout);#include #include #include #in

2012-08-21 22:31:44 9563

原创 hdu 3584 (三维树状数组模板 )

#include #include#include #include using namespace std;const int N=200;int C[N][N][N];int n,m;int lowbit(int a){ return a&(-a);}void Modify(int x,int y,int z,int c){ int tmpy,tmpz;

2012-08-21 02:30:40 800

原创 hdu (3874)树状数组

求区间【L,R】的不同的数的和。解答:这题没有离散化。先记录该位置出现的数字往前最近出现的位置,然后按查询的的右端点排序,最后一次扫描各个点同时检查右端点在该位置的询问。#include #include #include #include #include #include #define LL __int64using namespace std;con

2012-08-20 15:22:05 605

原创 hdu 4046(树状数组)2011年预选网络赛

题意:给一个字符串中,0:L,R为L到R之间有多少个连续的wbw,可以重叠。1:p,ch为在字符串中的p位置改为ch。n为字符串的长度,m为操作的次数。思路:这道题没能该出来很自责,因为很简单。更改一个占位置最多只影响到三个位置。每个位置代表从这位置开始往后连续的三个字符是否为"wbw"。用梳妆数组统计就可以了。注意跟换之前和之后的变化关系。#include #include #i

2012-08-20 13:41:00 1432

原创 poj 3686(最小费用最大流来搞KM算法:建图还是挺难想到的)

题目链接:点击打开链接【题意】有N个订单和M个机器,给出第i个订单在第j个机器完成的时间Mij,每台机器同一时刻只能处理一个订单,机器必须完整地完成一个订单后才能接着完成下一个订单。问N个订单完成时间的平均值最少为多少。【解答】       假设某个机器处理了k个玩具,那么对于这些玩具,有两种时间,一种是真正处理的时间,一种是等待的时间,等待的时间就是之前所

2012-08-18 22:21:21 4632 2

原创 poj 2886(线段树+反素数)

#include #include #include #define lson L , m , rt << 1#define rson m + 1 , R , rt << 1 | 1using namespace std;const int maxn = 520000;struct Node{ int L,R; int sum;}tree[maxn*4];in

2012-08-18 15:39:01 1953

原创 poj 2828(线段树:单点插入,区间查询)

排队买票,但是 中途 出现插队情况,比如 0 123,代表值为123的人 插入到 0 的位置,如果后面 出现 0 456,那么新的 0的位置就是 456,123就变成是 1的位置了观察发现,最后一个插入到该位置的人位置是固定的,那么我们可以从后面进行插入操作,pos val 代表val要插入到pos位置,那么就是说 pos 前面要留出 pos个位置,因为 是从 0 开始的。线段树 :r

2012-08-18 12:06:45 1238

原创 hdu 2795(线段树:query:区间求最大值的位子)

题意:h*w的木板,放进一些1*L的物品,求每次放空间能容纳且最上边的位子思路:每次找到最大值的位子,然后减去L线段树功能:query:区间求最大值的位子(直接把update的操#include #include #include #define lson l , m , rt << 1#define rson m + 1 , r , rt << 1 | 1using names

2012-08-18 10:21:21 663

原创 hdu 4364(矩阵相乘)

题意:给你一个aes矩阵和另一个矩阵matri让这两个矩阵相乘,我们重新定义矩阵相乘:1.相加用xor代替。2.相乘要看aes中的值,if 1: matri中的值不变。if 2: matri中的值左移一位。if 3: matri中的值左移一位,然后和左移前的值xor.Notice:After each shifting, a conditional xor with 0x1

2012-08-15 19:04:39 938

原创 金华邀请赛B题poj 4046(spfa求最短路)

题目大意:给定一个无向图,边上有权值,顶点也有权值。有q次询问,每次询问两个顶点,求这两个顶点之间(的路加上这条路上的最大的顶点权值)的最小值。思路:枚举点,然后求该点到a,b的最小距离。spfa的期望复杂度是O(ke),k一般在2左右,然后,就可以在这道题目大显身手了,这题时限非常紧,一般都是几千毫秒过的,时限只给了5000MS。所以,裸的spfa和暴力询问还是会超时。关键方程:(sta

2012-08-15 11:50:10 2577

原创 hdu:4360(spfa)求各种状态的最短路

题意:每条边除了有边权以外,还有一个字母标记。标记可以是“LOVE”里面任意字符。思路:这题是最短路的变形,用spfa需要记录一下到达这点时,有“LOVE”这四个字母结尾的四种状态,记录每一个状态的最短路,当最短路相等时选love最多的。这题找下一个点时需要两个字母是连在一块的#include #include #include #include #include #includ

2012-08-15 11:02:21 829

转载 zoj (单点更新区间查询:线段树)

题意:有n天,每天都可以买西瓜,每个西瓜的价格是ai,每个西瓜能吃bi天。问这n天每天都有西瓜吃的最小的代价是多少?如果你在第i天买了一个西瓜,那么之前买的西瓜就要全部扔掉,才能开始吃新的西瓜。定义dp[i]为到i天为止,每天都有西瓜吃的最小代价,那么状态转移方程就是:dp[i]=min(dp[i],dp[i-k-1]+a[i-k])。这样时间复杂度会达到O(n^2),所以要优化。在递推的过程

2012-08-13 22:00:37 982

原创 zoj 3630(tajan)求强连通分量的个数

#include#include#include #include #include #include#include using namespace std;const int nMax=300;const int mMax=9000005;int n,m;vectormp[nMax];stackmystack;bool cmp(int a,i

2012-08-13 14:05:49 2090

原创 zoj 3623(完全背包)

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4769题意描述:输入一个n和l,n代表n组值,l代表敌人的总权值,再输入n组值,每组两个数,分别代表制造这组战舰需要的时间和每秒钟可以对敌人造成伤害的权值,创建战舰可以重复创建。问需要多长时间,可以打败敌人 #include #include #includ

2012-08-13 10:47:54 976

原创 hud 4358(树状数组+离散化)

http://page.renren.com/601081183/note/865145486?null&ref=minifeed&sfet=2011&fin=1&ff_id=601081183&feed=page_reblog&tagid=1981432999&statID=page_601081183_2&level=2#pragma comment(linker, "/STACK:102

2012-08-12 16:22:10 622

原创 poj 1601(扩展欧几里德求不定方程的整数解)

欧几里德的原理:(转)http://www.cnblogs.com/void/archive/2011/04/18/2020357.html扩展欧几里德算法是用来在已知a, b求解一组p,q使得p * a+q * b = Gcd(p, q) (解一定存在,根据数论中的相关定理)。扩展欧几里德常用在求解模线性方程及方程组中。下面是一个使用C++的实现:int exGcd(int a, i

2012-08-11 13:42:00 2438

原创 poj 2284(欧拉公式的推广:线段分平面成几个区域:n+m-r==2)

欧拉公式:如果G是一个阶为n,边数为m 且含有R个区域的联通平面图,则恒有等式:n-m+R==2;推广:具有k 个联通分支的平面图G,有: n-m+R==k+1其中n,m,r,分别为阶数,边数,和区域数。回到题目:给出一些点 ,首尾相连,求分成的区域数 #include#include#include#define inf 0xffffff#include#

2012-08-10 20:50:35 4738

原创 hdu :4359(记忆化搜索DP)

左子树的和小于右子树的和 由于都是2的幂 所以只要且必须右子树上有剩下 数中最大的那个就可以了(当然左/右为空的特殊)查询时注意 根节点的选取是任意的 所以有假如说有n个节点 那根节点就有n种选法 还有根节点选出后 如果左右都有节点 那么剩余最大节点一定在右面 所以情况1 左/右为空2 左右深度同时为D-13 只有左/右深度为D-1要注意时刻取模这题会用到组合中的从

2012-08-10 18:37:30 734

原创 三分求一元三次方程的极值:hdu 4355

转:http://blog.csdn.net/rabia/article/details/7826144    二分法作为分治中最常见的方法,在各种比赛中经常出现(如:POJ 1434),但只适用于单调函数,若遇到凸(凹)函数求解极值,可采取三分的方法求解。凸(凹)函数在高数中的定义是:若函数的二阶导数在区间上恒大于0,则该函数在区间为凸函数;反之,小于0为凹函数。在比赛中面对一个问题而推出的

2012-08-10 13:54:38 4103 1

转载 POJ 1639(K度限制的生成树)

题目大意是:矮人虽小却喜欢乘坐巨大的轿车,轿车大到可以装下无论多少矮人。某天,N(N≤5000)个矮人打算到野外聚餐。为了集中到聚餐地点,矮人A要么开车到矮人B家中,留下自己的轿车在矮人B家,然后乘坐B的轿车同行;要么直接开车到聚餐地点,并将车停放在聚餐地。虽然矮人的家很大,可以停放无数量轿车,但是聚餐地点却最多只能停放K辆轿车。现在给你一张加权无向图,它描述了N个矮人的家和聚餐地点,要你求出

2012-08-09 10:23:22 1871

原创 poj 2185(流的最小费用的充要条件)消负圈

【题意】:一个城市有n座建筑物,每个建筑物里面有一些人,为了在战争爆发时这些人都可以避难,城市里面建了m座避难所。每座避难所只能容纳有限人数。给出每个建筑物和避难所的坐标(题目要求距离为曼哈顿距离+1)。现在给你一种避难方案,问这种方案是否为最优方案,如果不是,请输出一种比当前更优的方案(不一定最优)。【题解】:好明显的费用流(距离看成费用),如果此题建费用流模型找最小费用流必定超时,而且

2012-08-08 20:03:34 1378

原创 poj 2756(java的skip函数保证输入数字)

skip函数Source CodeProblem: 2756 User: 1013101127 Memory: 5628K Time: 594MS Language: Java Result: Accepted Source Code import java.io.*;import java.util.*;import java.math.*; p

2012-08-05 16:40:27 1091

原创 poj 2396(有上下界的 可行流)

Amber大牛的《图论原理》:问题模型:给定一个加权的有向图,满足:(1)容量限制条件:(2)流量平衡条件:(2)中的即除了源汇外,所有点都满足流量平衡条件,则称G为有源汇网络;否则,即不存在源汇,所有点都满足流量平衡条件,则称G为无源汇网络。将这类问题由易到难一一解决:问题[1] 求无源汇的网络有上下界的可行流由于下界是一条弧上的流必需要满

2012-08-05 15:55:15 837

空空如也

空空如也

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

TA关注的人

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