图论
wyl_zheyang
这个作者很懒,什么都没留下…
展开
-
NYOJ 920 Trees
先做了树的判定,在做了这道题,花费一上午的时间,对于并查集的使用,用深刻许多,对于这道题我们可以这样做:1,首先判断有几个集合2,判断每个集合是不是都能成树#include#include#includeusing namespace std;int out[10003];int num1[250003],num2[250003];int father[100001];i原创 2013-11-26 14:31:38 · 637 阅读 · 0 评论 -
hdu 1116 欧拉路 + 并查集
欧拉路的基本题。只要知道就可以做出来了。关于欧拉回路和欧拉路径定义:欧拉回路:每条边恰好只走一次,并能回到出发点的路径欧拉路径:经过每一条边一次,但是不要求回到起始点①首先看欧拉回路存在性的判定:一、无向图每个顶点的度数都是偶数,则存在欧拉回路。二、有向图(所有边都是单向的)每个节顶点的入度都等于出度,则存在欧拉回路。原创 2014-04-16 15:42:29 · 516 阅读 · 0 评论 -
费用流模板
#define CLR(arr,val) memset(arr,val,sizeof(arr))const int M=5010,ME=100000;int INF=0x3fffffff;class MaxFlow{public: void clear() { CLR(Head,-1);top=0;CLR(Flow,0); } void a翻译 2014-04-18 11:00:53 · 468 阅读 · 0 评论 -
nyoj 传纸条(一)
/*费用流,这道题的关键在于建图,看了一下大牛的博客,想了这道题总结一下思路;首先对于这种单一走路的题,一定要有拆点的思路对于这道题关建就在于拆点,首先让我们想一下,怎么让一个点只走一下呢,这就是插电的精髓然后加一条边,容量为 1,费用为当前数值的一条边,然后把这个点的右方下方的点加一条边,左上角顶点作为原点右下角顶点作为汇点,求一遍费用流就行。。。。*/#include#in原创 2014-04-18 16:54:25 · 506 阅读 · 0 评论 -
hdu 4738 图的割边
/*****证明:割边:本来连通图,去掉该边之后,原图不连通,次边称为割边如何求割边呢?首先如果u->v是割边那么v的子孙节点没有边连接到v的祖先,那么这条边就是割边*********/#include#include#includeusing namespace std;struct{ int head;}H[20000];int low[20000],dfs原创 2014-04-08 18:45:32 · 481 阅读 · 0 评论 -
网络流
#include#include#include#include#define N 505#define inf 999999999using namespace std;int n,m,s,t,dis[N],pre[N],gap[N],flow[N][N];struct edge{ int v,w; edge *next,*rev; edge(){next=0;} e转载 2014-04-09 12:57:52 · 402 阅读 · 0 评论 -
poj 2942 奇圈+点双联通分量
/***昨天开了一段时间然后不会。。。今天又看了一上午,虽然不是很彻底,但是最终好事搞定了真是感觉到心力憔悴。。。。。。。奇圈:边数为奇数的圈定理:二分图中不存在奇圈;***/#include#include#includeusing namespace std;const int M = 1008;int low[M],t,dfs[M],instack[M],odd[M],原创 2014-04-09 12:40:25 · 526 阅读 · 0 评论 -
nyist 677 网络流
#include #include #include #includeusing namespace std;#define N 1005#define M 400005#define INF 0x7fffffff#define min(a,b) a < b ? a : b#define CLR(a,v) memset(a,v,sizeof(a))struct Vertex原创 2014-04-09 17:23:38 · 507 阅读 · 0 评论 -
poj 3177 双联通缩点
/***双联通缩点,再加几条边能使原图成为全部双联通和强联通的区别在于,一个是有向图,一个是无向图此题,原题连通***/#include#include#include#includeusing namespace std;const int M = 10008;int low[M],t,dfs[M],instack[M],odd[M],index,bet,cn,stack原创 2014-04-10 10:54:25 · 493 阅读 · 0 评论 -
codeforces 468B 2-sat
今天明白了2-SAT;表示对一对整数之间的关系是否存在#include#include#include#include#includeusing namespace std;const int Maxn = 1e5+10;int mark[Maxn << 1];int s[Maxn * 2],top,tp;int head[Maxn*2];map mp;int x原创 2014-10-23 11:44:24 · 764 阅读 · 0 评论 -
nyist 608 并查集模板
#includeint father[1005];int find(int x) //寻找集合的祖先{if(x==father[x])return father[x];return father[x] = find(father[x]);//路径压缩}void merge(int a,int b) //合并集合{ int G = f原创 2013-04-21 16:15:59 · 1247 阅读 · 0 评论 -
sgu 194上下界网络流
又搞了个模板,这个模板应该ok,足以应付各种网络流了题意:给n个点m 条边,其中每条边的流量有两个限制不能大于r不能小于l,求是否有可行解,如有输出每条边的流量#include#include#include#includeusing namespace std;const int maxn = 1000000;const int oo = 0x3777777;struct原创 2014-10-29 14:44:46 · 731 阅读 · 0 评论 -
省赛组队赛9 I 题Information
首先这道题没看懂题意,比完原创 2014-05-02 14:58:27 · 980 阅读 · 0 评论 -
最小割最大流记录
经过一系列的学习,明白了一些东西记录一下备忘割:是指删除一些边,使剩下的网络中没有增光路,那么可以得出max_flow 为什么呢?首先我们明白知道最大流一定是根据增光路得到i的,那么割就是包含增光路的一个集合,那么sum_c(s,t)一定是在在这个 基础上得到的,也就是割中一定包含了这些增光路的一条路径,并且这条路径不一定是最小的因为对于一条增光路来说,流量是越来越小的也就是f(j原创 2014-02-27 15:13:01 · 491 阅读 · 0 评论 -
HDU 1250
唉!对于这样的题表示很无奈~~~今天看了很多博客,搞定了,首先,这是一个大数,我们开一个2维数组,第一维表示这个数,第2维,可以用来存储这个数的 fibonacci();那么我可以采取,进制的方法,以 10000为进制,那么;我们便可以直接计算了。#includeint s[10004][551];void fun(){ s[1][1] = s[2][1] = s原创 2013-06-08 19:14:19 · 487 阅读 · 0 评论 -
HDU 2767 强连通之缩点
#include #include #include #include using namespace std;int instack[20008],low[20008],dfn[20008];bool stack[20008],DFN[20008];int n,m,top,indx,bet,num[20008],into[20008],outo[20008];ve原创 2013-04-29 17:57:09 · 552 阅读 · 0 评论 -
NYOJ 496 拓扑排序
解决拓扑排序分;找到入度为0的点----->>删除与此点有关的边----->>>输出该点---------->> 重复操作----->>>>判断点的个数 = ? 总点数 yes : no#include #include#include using namespace std;int m,n;int into[100]; int map[27][27];v原创 2013-04-29 08:27:56 · 552 阅读 · 0 评论 -
NYOJ oj 120 强连通分量之 tarjan
#include #include #include #include #define MAX 500using namespace std;int top,bet,indx,cont=0;vector vc[MAX];bool DFN[MAX],stack[MAX]; int dfn[MAX],instack[MAX],low[MAX];void tarjan(int x原创 2013-04-28 12:51:53 · 550 阅读 · 0 评论 -
nyist oj 239 月老的难题 解决超时问题
//首先这道题 ,不能直接用二维数组,他会遍历很多无用的点,因此你可以,用邻接表,或容器 vector 下面介绍 vector,具体用法不再说,看代码吧~~~~ #include#include#includeusing namespace std;int n,m,link[1000],vis[1000];vector vc[10000];bool getsum(i原创 2013-04-20 17:00:09 · 662 阅读 · 0 评论 -
hdu 4160 建 图 问 题
//此 题 最 难 的 是 如 何 建 图,因 为 如 果 我 能 套 下 这 个 东 西 那 么 就 有 关 系 ,那 么 我 就 让 mapp[i][j] = 1。#include#include#includeusing namespace std;struct Node{ int w,l,h;}a[1000];int map[505][505],n,link[505原创 2013-04-19 21:26:48 · 513 阅读 · 0 评论 -
hdu 2063 二分图最大匹配
#include#include#include#includeusing namespace std;vector V[505];int vis[505],link[505];bool getsum(int a){ for(int i=0;i<V[a].size();i++) { int x=V[a][i];原创 2013-04-19 21:22:28 · 474 阅读 · 0 评论 -
网络最大流问题
§4 网络最大流问题 网络最大流问题是网络的另一个基本问题。许多系统包含了流量问题。例如交通系统有车流量,金融系统有现金流,控制系统有信息流等。许多流问题主要是确定这类系统网络所能承受的最大流量以及如何达到这个最大流量。4.1 基本概念与定理1. 网络与流定义14 (1)网络:例1 如图7-20是连结某产品产地 和销地 的交通图。弧转载 2014-01-17 13:56:26 · 6736 阅读 · 1 评论 -
Hdu 1532 && Hdu 3549 简单最大流初学者必做题
昨天花费以上午学了简单最大流,对于最大流有了一定的了解,而这两道题,正好练练手,代码都是一样的,下面仅仅附上1532这道题问题:从s点能流入到t点的最大值。解决办法:EK算法:每次找出一条到达t点的路然后更新该条路上的正向流浪,和反向流浪,如果找不到了路,说明当前一是最大流。下面附上代码。#include#include#include#includeusing n原创 2014-01-18 08:59:10 · 685 阅读 · 0 评论 -
poj 2983 差分约束学习(用队列超时了,不防用栈试试)
对于差分约束,写了两道题,有了自己的想法,归纳为3点1,找出所有条件,其中包括隐含的。2,对所有条件进行分析,转化为3角不等式。3,应用最短路,或最长路,进行松弛操作,或判环推荐:spfa算法#include #include #include #include using namespace std;const int M = 100008;int top =原创 2014-02-14 10:07:11 · 564 阅读 · 1 评论 -
最小费用最大流 hdu 3667
/*学了好几天了,终于生成了模板一直以来有一个问题没有克服,今天终于想明白了,那就是为什么要加反向流量呢?那是因为如果你在加流量的时候如果加多了,,则要溜回去。。。。*/#include#include#include#include#includeusing namespace std;const int maxn = 100000;const int inf = 0x原创 2014-02-27 12:37:39 · 683 阅读 · 0 评论 -
hdu 1569 最大流
擦,搞了几个模板,都有错,就这个还好吧#include #include #include #include #include #include #include #include #include #include #include #include #define LL long long#define pii pair#define INF 0x3f3f3f3f原创 2014-10-14 09:59:08 · 840 阅读 · 0 评论