- 博客(11)
- 收藏
- 关注
原创 nyoj 传纸条(一)
/*费用流,这道题的关键在于建图,看了一下大牛的博客,想了这道题总结一下思路;首先对于这种单一走路的题,一定要有拆点的思路对于这道题关建就在于拆点,首先让我们想一下,怎么让一个点只走一下呢,这就是插电的精髓然后加一条边,容量为 1,费用为当前数值的一条边,然后把这个点的右方下方的点加一条边,左上角顶点作为原点右下角顶点作为汇点,求一遍费用流就行。。。。*/#include#in
2014-04-18 16:54:25 506
翻译 费用流模板
#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
原创 hdu 1116 欧拉路 + 并查集
欧拉路的基本题。只要知道就可以做出来了。关于欧拉回路和欧拉路径定义:欧拉回路:每条边恰好只走一次,并能回到出发点的路径欧拉路径:经过每一条边一次,但是不要求回到起始点①首先看欧拉回路存在性的判定:一、无向图每个顶点的度数都是偶数,则存在欧拉回路。二、有向图(所有边都是单向的)每个节顶点的入度都等于出度,则存在欧拉回路。
2014-04-16 15:42:29 516
原创 hdu 1558 判断线段相交 + 并查集
#include#includeusing namespace std;int father[10008];int find(int x){ if(x == father[x])return x; return father[x] = find(father[x]);}int merge(int a,int b){ int G = find(a);
2014-04-15 14:33:12 435
原创 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
原创 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
转载 网络流
#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
原创 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
原创 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
原创 hdu 1358 kmp小算法
/*学了一下算法,保存一下*/#include#includeusing namespace std;int a[1000008],b[10008],next[1000008];void getnext(int m){ int i=0,j=-1; next[0] = -1; while(i<m) { if(j || b[i] == b[j
2014-04-02 19:40:23 515
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人