图论
文章平均质量分 71
ACM_Victoria
To seize everything you ever wanted, one moment...
展开
-
ZOJ2532-网络流求关键边
#include #include #include using namespace std;const int NN=110;const int MM=3000;const int INF=0x3fffffff;int n,m,S,T,NV;struct Edge{ int u,v,flow,next; Edge() {} Edge(int _u,i原创 2012-08-04 10:33:46 · 1498 阅读 · 0 评论 -
HDOJ2448-最短路,KM匹配
#include #include #include #include using namespace std;const int NN=120;const int INF=0x3fffffff;struct node{ int v,w; node() {} node(int _v,int _w): v(_v),w(_w) {}};int n,m,l原创 2012-08-19 20:01:26 · 605 阅读 · 0 评论 -
POJ2230-还是简单的欧拉回路求解
#include #include #include #include using namespace std;const int NN=10002;vector ans;vector adj[NN];int n,m,cur[NN];void dfs(int u){ for (int &i=++cur[u]; i<adj[u].size(); i++) {原创 2012-08-17 16:52:02 · 4916 阅读 · 0 评论 -
HDOJ4322-费用流
/*好题~网络流不熟啊,刚开始枚举会被当成喜欢的糖的糖的组合来最大流,确实没有考虑清楚当bi%k的一些不同的情况~看了一篇比较有启发的博客后,才写的费用流:以糖果数量限制流量,在喜欢的糖果与人之间连边 在人与汇点间建费用为k,流量为b[i]/k的边,那么cost*flow就成了glad value了!(这是我茅塞顿开的地方) 那么我在之前用最大流做时不能处理的b[i]%k的问题也好原创 2012-08-02 11:52:34 · 596 阅读 · 0 评论 -
POJ2749-二分,2SAT
#include #include #include using namespace std;const int NN=1100;const int MM=4000000;const int INF=100000000;int n,a,b,diss;int d[NN],hate[NN][2],love[NN][2];struct Edge{ int v,next;原创 2012-08-01 10:10:24 · 709 阅读 · 0 评论 -
POJ1637-最大流判断混合图欧拉回路
#include #include #include #include #define NN 500#define MM 500000#define INF 0x7fffffffusing namespace std;int n,m,S,T,NV,sum;struct Edge{ int u,v,flow,next;} e[MM];int en,head[NN]原创 2012-07-31 14:30:31 · 5181 阅读 · 0 评论 -
POJ1182-并查集
这题有一个关键点: x的食物的食物以x为食,即生物间的关系是以3为循环的,就像运算 (0+1)%3=1,(1+1)%3=2,(2+1)%3=0,(0+1)%3=1... ...不管d=1还是d=2,都表示x与y有关系,因此可以并到一个并查集里去,然而具体的同类与捕食关系可用0,1,2来代表;这里以r[i]表示i与其并查集中父节点p[i]的关系: 0表示同类,1表示i吃p[i],2表是i被p原创 2012-08-14 17:39:12 · 841 阅读 · 0 评论 -
POJ3487-稳定婚姻系统
#include #include #include #include #include #include using namespace std;const int NN=128;const int INF=0x3fffffff;int n,cnt1,cnt2,hash[NN],tmpf[NN],cur[NN],num[NN],tag[NN],w[NN][NN];char原创 2012-07-29 12:18:26 · 2360 阅读 · 0 评论 -
POJ2396-带上下限制的最大流
#include #include #include using namespace std;const int NN=1000;const int MM=5000000;const int INF=0x3fffffff;bool blank=false;int n,m,S,T,NV,en,head[NN];struct Edge{ int u,v,flow,next原创 2012-08-12 23:03:28 · 1261 阅读 · 0 评论 -
ZOJ3332-竞赛图中的哈密顿路
竞赛图:图中的任意两点间有且仅有一条有向弧连接求竞赛图中的哈密顿路的算法:首先,由数学归纳法可证竞赛图在n>=2时必存在哈密顿路;(1)n=2时显然;(2)假设n=k时,结论成立,哈密顿路为V1,V2,...,Vi,...,Vk; 现添加第k+1个结点,若存在弧和弧,则可得哈密顿回路V1,V2,...,Vi,Vk+1,Vi+1,...,Vk; 若不存在上述的原创 2012-08-13 11:44:39 · 6418 阅读 · 0 评论 -
POJ3155-最大密度子图
/*主算法:零一规划,用二分来猜测最大密度为g。。。构造函数h(g)=(|E'|-g*|V'|)设D为最优解,当h(g)D;当h(g)=0,g=D;当h(g)>0,g<D;网络流建图部分:在原图点集V 的基础上增加源S和汇T;将每条原无向边(u,v)替换为两条容量为1 的有向边(u,v)和(v,u);增加连接源S到原图每个点v的有向边(s,v) , 容量为U ;增加连接原图每个原创 2012-08-08 18:57:16 · 2143 阅读 · 0 评论 -
POJ3686-KM匹配模板题
#include #include #include using namespace std;const int NN=2550;const int INF=0x3fffffff;int n,m,lx[NN],ly[NN],w[NN][NN],a[NN][NN],match[NN],slack[NN];bool vx[NN],vy[NN];void init(){原创 2012-08-09 14:58:11 · 887 阅读 · 0 评论 -
HDOJ2433-最短路径树
//1406ms险过。#include #include #include #include #include using namespace std;const int NN=110;const int MM=3100;struct node{ int v,e; node() {} node(int _v,int _e): v(_v),e(_e) {}原创 2012-08-21 17:35:21 · 728 阅读 · 0 评论 -
HDOJ3035平面图最小割转最短路
百万数量级的点呀好吓人~此题两种解法:(1)最大流,但明显点太多,肯定超时,不过明知道超时我也写了一遍~然后坐等TLE~(2)最短路,刚开始不知道还可以这么转化,搜了一下平面图最小割,看到下图后顿悟(虽然不知道原图干嘛的~),立马写最短路了,我个傻B一最短路就写spfa,一最短路就写spfa,也不分析分析~又TLE之后就又写了dijkstra了,2秒多过的。还有这题建图有点原创 2012-08-21 17:24:26 · 1858 阅读 · 3 评论 -
POJ2175-最小费用流消圈算法
#include #include #include #include #include using namespace std;const int NN=210;const int MM=100000;const int INF=0x3fffffff;inline int Abs(int x){ if (x>=0) return x; else原创 2012-08-23 19:44:44 · 2807 阅读 · 1 评论 -
POJ3648-2SAT解的求得
/*2SAT一个解的求得:推荐赵爽的2-SAT解法浅析论文*/#include #include #include #include #include #define NN 100#define MM 10000#define NONE 0#define RED 1#define BLUE -1using namespace std;int n,m;struct原创 2012-07-31 10:23:11 · 1564 阅读 · 1 评论 -
一般图最大匹配问题-带花树开花算法
以前用这个算法写过一两个水题,当时纯粹是套用模板,对算法本身是一知半解。然后Watashi的多校题中有个带花树模板题,现成的模板都套出了各种死循环,RE问题,弱爆了。这两天重新看了看论文和博客,重新理解了一遍,顺便把论文的前小半部分关于二分图最大匹配和一般图最大匹配的地方翻译了一下,论文的后半部分的二分图最大权匹配和一般图最大权匹配问题暂时还没看。论文地址:http://builtinclz.原创 2013-08-28 17:35:37 · 23144 阅读 · 8 评论 -
SGU194-带上下限的最大流基础
/*对于有流量上下限的无源的网络流的可行流转化为一般的有源汇点的最大流来做(1)添加超级源点S和超级汇点T(2)对于原有的边(u,v,l(u,v),c(u,v))(l为流量下限,c为流量上限),添加边(u,v,0,c-l);(3)对于每个结点i,记w[i]=sum(l(u,i))-sun(l(i,v)); 若w[i]>0,添加边(S,i,w[i]),若w[i]<0,添加边(i,T,-原创 2012-08-11 17:30:17 · 1754 阅读 · 0 评论 -
HDOJ4115-Eliminate the Conflict,2SAT
每一局alice要么与Bob平手,要么赢Bob,二取一,为2SAT问题,而不是锤子剪刀布3SAT。对于m次要求,不管是same还是different,都分成三种情况,挺好想的2SAT。#include #include #include using namespace std;const int NN=25000;const int MM=100000;int n,m,en原创 2012-11-06 10:04:23 · 798 阅读 · 0 评论 -
线性规划与网络流24题
1.飞行员配对方案问题 二分匹配#include #include #include using namespace std;const int NN=110;int n,m,match[NN];bool mp[NN][NN],used[NN];bool dfs(int u){ for (int v=1; v<=m; v++) if (mp[u][v])原创 2012-10-23 21:27:05 · 1263 阅读 · 0 评论 -
HDOJ4411-费用流
有个明显的关系:处理i城市之前必须处理掉i-1城市~~先floyed求出各点间的距离mp[i][j],把n个点一分为3(P1i,P2i,P3i),源点S,汇点T,建图如下:1)S向P11连一条流量为k,费用为零的边:(k个小队)2)P1i向P1(i+1)连一条流量为k,费用为零的边:(没去i城市的小队可去i+1城市)2)P1i向P2i连一条流量为1,费用为mp[0][i]的边:原创 2012-09-23 16:52:55 · 1667 阅读 · 0 评论 -
POJ3728-LCA及诸多优化
这题是一个在一开始就能吓住人,然后分析分析,再分析分析,再分析分析,发现能做的好题。题意:给出一个结点带权price的树状图(结点数首先最朴素的想法是,找出u到v的路径(用到LCA),完整地访问一遍得结果。朴素的想法是出发点,虽不可行,觉得有可行的优化空间。优化线索:询问之间有路径的重复,重复的部分可通过一些记录来除掉重复访问和计算;对于这条线索,我的想法是可以先处理路径较短的原创 2012-08-26 20:40:38 · 1748 阅读 · 0 评论 -
POJ2047-Concert Hall Scheduling
本想找个DP做做,一读题想到的做法还是费用流~~待会儿再想想DP写法:#include #include #include #include #include #include using namespace std;const int NN=2100;const int MM=1000000;const int INF=0x3f3f3f3f;struct inte原创 2012-10-04 21:37:04 · 1186 阅读 · 0 评论 -
POJ2763-LCA在线算法+树状数组
#include #include #include #include #include using namespace std;const int NN=210000;int n,en,c[NN],head[NN];struct Edge{ int v,w,next; Edge() {} Edge(int _v,int _w,int _next): v原创 2012-08-28 11:25:26 · 1336 阅读 · 0 评论 -
HOJ2739-the Chinese Postman Problem
#include #include #include #include #include using namespace std;const int NN=250;const int MM=200000;const int INF=0x3fffffff;int n,m,en,sum,S,T,NV,head[NN],in[NN],out[NN];struct Edge{原创 2012-09-04 22:32:08 · 1068 阅读 · 0 评论 -
HDOJ3594-仙人掌图的判断
/*题意:给出一个有向图,判断该图是否为仙人掌图.这里有一个不错的关于仙人掌图性质分析文章: pdf:http://files.cnblogs.com/ambition/cactus_solution.pdf代码也是按照文章中的仙人掌图的3个性质来做的.*/#include #include #include using namespace std;const int原创 2012-08-24 15:51:16 · 3424 阅读 · 0 评论 -
POJ3164-最小树形图
//A是A了,有蛋也疼的代码#include #include #include #include #include using namespace std;const int NN=110;const double INF=1e20;int n,m;int pre[NN];double x[NN],y[NN],d[NN][NN];bool vis[NN],circle原创 2012-08-07 11:46:09 · 818 阅读 · 2 评论 -
HDOJ2853-KM匹配,放大技巧
/*几天我想通了。想不到好的办法总在google算法,自己都觉得自己很猥琐了~其实没什么的。我很菜,菜得绿油油的,如果总是死脑筋想自创,那效率会有多低?不过自我思考的独立阶段还是要保持好的。这题让我自己想恐怕想不到加大权值来保持原匹配优势的办法:统一扩大一定倍数,再在原匹配权值上加个小量,再去匹配这样做的条件是小量不会影响最后的答案,也就是倍数够大,对于这题这个倍数大过n(<=原创 2012-08-06 19:30:05 · 633 阅读 · 0 评论 -
POJ3680-费用流
/*都说这题是构图很巧的好题~我也赞一个吧,虽然我没有想到。说说我的思考过程吧。做这题是因为这题在网络流的分类里面,自然一开始就想构图了~(1)能作为结点的东西的只有两个,区间和端点,区间没什么道理,以端点做结点的话,离散化是要的;(2)k限制流量用,段的权值与流量没什么关系,是一种费用性的东西,所以是费用流;(3)考虑到区间包含连续的点,我画了一个S->1->2->...->T的线图原创 2012-08-05 23:52:47 · 1571 阅读 · 0 评论 -
POJ2728最优比率生成树
#include #include #include #include using namespace std;const int NN=1002;const double inf=1000000000;const double eps=1e-5;typedef struct point{ double x,y,h;}point;int n;point p[NN]原创 2012-07-07 19:48:19 · 1439 阅读 · 1 评论 -
HDOJ3018欧拉路,几笔画判断
//并查集+简单的欧拉路条数判断#include #include #include using namespace std;const int NN=100005;int degree[NN],p[NN],odd[NN];int n,m;int pp(int x){ if (p[x]!=x) p[x]=pp(p[x]); return p[x];}v原创 2012-07-06 13:51:01 · 6054 阅读 · 0 评论 -
POJ1144-求图的割点(裸)
#include #include #include #include using namespace std;const int NN=105;vector adj[NN];int n,rt,rt_son;int dfn[NN],low[NN];bool cut[NN];void dfs(int u,int dep){ dfn[u]=low[u]=dep;原创 2012-07-06 13:33:18 · 1740 阅读 · 2 评论 -
第一篇ACM切题博客——最短路专题(HDU1)
做这些题花了过长的时间,提高效率是目前需要解决的重要问题。做一个勤学好问的孩子吧。目录:【HDU】1548 A strange lift ★2544 最短路 ★3790 最短路径问题 ★2066 一个人的旅行 ★2112 HDU Today★1874 畅通工程续★1217 Arbitrage 1245 Savin原创 2012-04-12 20:22:57 · 2976 阅读 · 1 评论 -
POJ3463-dij求次短路径
/*抄也罢,袭也好,终究还是过了两种方法:1.A*求k短,k=2;(实际上爆内存)2.延拓dijkstra求最短到次短(最终选用的方法,32ms)*/#include #include #include #include #define mem(a,x) memset(a,x,sizeof(a))using namespace std;const int NN=1005;原创 2012-07-06 13:26:14 · 1458 阅读 · 0 评论 -
USACO3.3.1求欧拉路入门,邻接矩阵
/*ID: 19930323PROG: fenceLANG: C++HINT: 参考usaco第三章第三节的关于Eulerian Tour的讲解*/#include #include #include #include #define NN 502using namespace std;int n=0,m,sum=0;int degree[NN];int linkk[原创 2012-07-06 13:22:46 · 5667 阅读 · 0 评论 -
tarjan算法
参考资料:http://www.byvoid.com/blog/scc-tarjan/几道简单的练习题(hdoj):强连通:1269 迷宫城堡 判断是否是一个强连通2767 Proving Equivalences 至少加几条边让整个图变成强连通3836 Equivalent Sets 至原创 2012-05-01 16:08:52 · 1924 阅读 · 1 评论 -
POJ3522差值最小的生成树
/*对于固定最小边的生成树中,用Kruskal得到的最小生成树一定是最大边-最小边的差值最小的生成树,从而枚举最小边进行Kruskal得到的差值最小的一个就是答案,数据小,很好过,不用多少优化*/#include #include #include using namespace std;const int NN=102;const int MM=50000;const int原创 2012-07-07 21:47:02 · 1751 阅读 · 0 评论 -
HDOJ1853-费用流(圈,拆点)
//代码MCMF和SPFA部分直接拷贝来源于AOJ581#include #include #include #include #include using namespace std;const int NN=250;const int MM=50000;const int INF=0x3fffffff;struct Edge{ int u,v,cost,flow原创 2012-07-06 13:46:51 · 967 阅读 · 0 评论 -
HDOJ3622-2SAT,二分
#include #include #include #include #include #include using namespace std;const int NN=210; //之前把NN设为了100+导致RE,实在不应该const double eps=0.0001; //精度极小值应设为输出要求精度的%1,WA在这一次struct Edge{原创 2012-07-06 13:41:41 · 515 阅读 · 0 评论 -
POJ3621-平均最短路,二分
/*在做过POJ2449后居然在这题想错了,实在不应该,其他就不说了。。。*/#include #include #include #include #define mem(a,x) memset(a,x,sizeof(a))using namespace std;const int NN=1005;const int MM=10010;const double INF=1原创 2012-07-06 13:39:15 · 999 阅读 · 0 评论