图论
Saikaai
这个作者很懒,什么都没留下…
展开
-
BZOJ 1143 [CTSC 2008] 祭祀 (二分图匹配,最小相交路径覆盖)
题目链接:BZOJ 1143这道题我查了好久错啊,最后才发现读入边的时候讲M打成N了QAQ。总结了一些二分图匹配的知识:1.最大匹配 == 最小点覆盖 == 总点数-最大点独立集2.最小不相交路径覆盖 == 原图总点数-新图最大匹配3.最小相交路径覆盖 => 先用floyd求传递闭包 => 最小不相交路径覆盖#include#include#includeusin原创 2015-03-14 14:10:31 · 537 阅读 · 0 评论 -
BZOJ 1059 矩阵游戏(二分图匹配,匈牙利算法)
题目链接:BZOJ 1059通过分析,我们知道,行交换和列交换不会改变这一行的信息,这一行最多有一个1放在主对角线上。对于坐标为(i,j)的为黑色的棋子,我们只需将i行与j列连边,然后跑匈牙利算法即可。#include#include#includeusing namespace std;int T,N;int map[210][210],vis[210],belong[210原创 2015-02-26 15:40:29 · 697 阅读 · 0 评论 -
BZOJ 1191 超级英雄hero(二分图匹配,匈牙利算法)
题目链接:BZOJ 1191这道题就是裸的二分图匹配,跑匈牙利算法即可。我用的邻接矩阵写的,这道题的话用临街链表写空间和时间都应该更可观。#include#include#includeusing namespace std;int N,M,tot=0;int map[1001][1001],vis[1001],belong[1001];bool find(int x){原创 2015-02-26 15:36:45 · 557 阅读 · 0 评论 -
关于匈牙利算法
啦啦啦,自从看了这位神犇的博客,再也不用怕匈牙利算法!!!华丽丽的传送门:神犇的博客。下面贴一个自己写的匈牙利算法的模板吧。bool find(int x){ for(int i=1;i<=N;i++) if(link[x][i]&&!vis[i]){ vis[i]=1; if(!belong[i]||find(belong[i])){ belong[i]=x;原创 2015-02-26 15:32:29 · 422 阅读 · 0 评论 -
BZOJ 2150 部落战争(最小路径覆盖)
题目链接:BZOJ 2150这道题应该是裸的最小路径覆盖。我们知道:最小路径覆盖=总结点数-最大匹配数。对于二分图的最大匹配数,可以用最大流求,也可以用匈牙利算法求。但是我现在还不会匈牙利算法(请神犇自动无视),所以我用dinic写的。对于这道题,最后的答案就是: ‘.’的个数-最大流。建图:把每个节点拆成两个点,u(流入),v(流出),加入源点S,和汇点T。将S与v连边,u与T连边,u与原创 2015-02-17 17:17:00 · 621 阅读 · 0 评论 -
ZKW费用流 模板
学了这么多天的zkw费用流,竟然只会最简单的。。。粘上蒟蒻的模板吧。bool spfa(){ memset(vis,0,sizeof(vis)); for(int i=0;i<=T;i++)dep[i]=-1; int head=0,tail=1; dep[T]=0; vis[T]=1; q[head]=T; while(head!=tail){ int u=q[head]; h原创 2015-02-12 10:30:06 · 544 阅读 · 0 评论 -
bzoj 1927 星际竞速(拆点费用流)
题目链接 http://www.lydsy.com/JudgeOnline/problem.php?id=1927好嘛,现在我要正式用某神犇的博客上的题的顺序开始刷题了。。。这道题将每个能力爆发模式的费用,即单点费用拆成两个点,再加边。要加入一个源点和汇点。本蒟蒻只会写有点耗时的spfa版,若有那个神犇会zkw费用流,请教一下= =||。#include#include#inclu原创 2015-02-10 21:08:51 · 939 阅读 · 0 评论 -
BZOJ 3876(支线剧情) 有下界费用流
Description【故事背景】宅男JYY非常喜欢玩RPG游戏,比如仙剑,轩辕剑等等。不过JYY喜欢的并不是战斗场景,而是类似电视剧一般的充满恩怨情仇的剧情。这些游戏往往都有很多的支线剧情,现在JYY想花费最少的时间看完所有的支线剧情。【问题描述】JYY现在所玩的RPG游戏中,一共有N个剧情点,由1到N编号,第i个剧情点可以根据JYY的不同的选择,而经过不同的支线剧情,前原创 2015-02-08 09:36:19 · 1959 阅读 · 0 评论 -
codevs 1482 路线统计
【问题描述】给出一个n个点有向图,求从s点到f点恰好经过时间t的路径总数。不能,可以重复的走各点。【输入数据】第一行包含一个整数n, 所有点是从0到n-1编号.接下来n行,每行包含n个字符.第i行第j个字符表示i到j需要的时间,字符只可能是’1’到’5’,或者是’.’表示i不能到达j, 保证主对角线都是’.’。接下来一行3个整数s, f, t。【输出数据】输原创 2014-10-30 16:50:25 · 556 阅读 · 0 评论 -
关于差分约束的一些总结和题解。(poj 1364 ,3159, 2983, 3169 ,1201 ,1716 ,1275)
这些天写了7道差分约束的题。以下是我的心得和总结。1.写对不等式是关键。不仅是题中给出的显性的不等关系,还有诸如b>a等隐形的关系。不管重不重要,不等式一定要写全。2.对于一些题,需要加入超级源点,并将该点与其他每一点连一条权值都相同(一般选0)的有向边。3.注意最后的输出,到底是f[n],还是f[n+1],还是f[1]。若存在负环,则无最短路,存在正环,则无最长路。对于多组数据,要注原创 2014-10-28 21:52:05 · 628 阅读 · 0 评论 -
Poj 2175 Evacuation Plan (消圈算法)
题目链接:poj 2175消圈算法,可以用来判断当前的方案是否是令费用最小的方案。若存在一个负环,那么一定可以找到比当前方案更优的方案。对于这道题,我们只需用残量网络建图,跑spfa判断这个图是否有环。若有环,沿着环更改方案即可。具体怎么建图,挖坑待填。先贴上代码。#include#include#include#include#includeusing namespace原创 2015-03-16 22:09:34 · 750 阅读 · 0 评论 -
重建 (树链剖分+线段树)
只是一个仅仅6KB的代码#include#include#includeusing namespace std;const int maxn = (int)1e5+10;int N,Q,k,tot=0;double xsum,xmin,xmax,count;int head[maxn],dep[maxn],fa[maxn],hv[maxn],anc[maxn],size[m原创 2015-03-23 20:29:17 · 444 阅读 · 0 评论 -
攻略世界树 (网络流)
【问题描述】这是在ALO世界线上。为了帮助桐子救出本子娜,ALfheim Online的多个工会展开了针对世界树的攻略活动。但是在攻略之前,必须策划好进攻方案。策划进攻方案之前也要先完成基础人员分组。在ALO中的小组分配中大致有四种定位,队长,战士,牧师,法爷。一个标准的小队应当拥有这四种人至少每种各一个。但是实际情况往往不如人意,人员职业往往并非正好1:1:1:1(就好像电院原创 2015-04-03 19:49:34 · 1017 阅读 · 1 评论 -
BZOJ 2324 [ZJOI2011] 营救皮卡丘
题目链接:BZOJ 2324对于限制“对于k节点,只有1到k - 1节点都被摧毁时,才能经过节点k”,我们可以通过用floyd处理,设dis[i][j]为i到j经过小于j节点的最短路径,进行转移即可。对于限制“每个节点都要被摧毁”,可以用有下界费用流解决。每个节点拆点,S节点与0节点的流出点连容量为k费用为0的边以保证有k个人到达N号节点。我开始wa了两次,因为我拆点的时候,直接是将点原创 2015-04-12 11:24:49 · 757 阅读 · 0 评论 -
codeforces 387D George and Interesting Graph (二分图匹配)
题目自己去找吧~~~这道题我一开始想的二分图,将每个节点拆点,x点集表示每一个节点的流出的点,y点集表示每一个节点流入的节点。对于题目中的好点对,我们将中心节点以及与中心节点相连的边删除之后,剩下的每个节点的入度和出度都为1,直接计算二分图最大匹配即可。容易得出答案为加上的边和删去的边之和。加上的边为2 * N - 1 - 与中心节点相连的边 + 点数 - 二分图最大匹配。然后我莫名其原创 2015-04-12 11:40:09 · 680 阅读 · 0 评论 -
BZOJ 1854 游戏(二分图匹配)
题目链接:BZOJ 1854这道题也可以用神奇的并查集做,但是由于我的脑洞不够大,所以就用的二分图匹配。但是直接暴力二分图匹配多次memset会TLE,所以每次标记vis只需记录它上次匹配的编号。#include#include#includeusing namespace std;#define maxn (1010000+5)int N,T=0;int head[maxn原创 2015-02-26 18:40:41 · 702 阅读 · 1 评论 -
BZOJ 1051 [HAOI 2006]受欢迎的牛 (图的联通,tarjan)
题目链接:BZOJ 1051直接用强联通分量暴力缩点,找到出度为0的点。如果有多个出度为零的点,那么就不存在受所有牛欢迎的牛。否则答案就为出度为零的点所对应强联通分量的大小。#include#include#include#includeusing namespace std;#define maxn (10000+10)int N,M,idx=0,tot=0;int hea原创 2015-03-07 17:03:34 · 491 阅读 · 0 评论 -
hdu 1533 Going Home (最大权匹配,KM算法)
题目链接:hdu 1533#include#include#includeusing namespace std;#define inf (1e5)int N,M,L;char map[110][110];int A[110][110],s[110][110],w[110][110],ly[110],lx[110],link[110],slack[110];bool visx[原创 2015-03-12 22:14:40 · 415 阅读 · 0 评论 -
BZOJ 3573 [HNOI 2014] 米特运输 (乱搞)
题目链接:BZOJ 3573虽说这道题的做法是乱搞,但是我一开始写的是也只会50分得暴力= =。说说这道题吧。50分的暴力应该很好想,就是保持一个节点不变,计算其它的节点的改变的次数,这样做时间复杂度是N^2,明显TLE。我们观察可以知道,对于这棵树,一个节点的值确定了,那么根节点的值也就唯一确定了。那么我们可以想到,对于每一个节点,计算保持该节点不变时根节点的值。至于计算之前,可以先用b原创 2015-03-01 19:50:39 · 1297 阅读 · 0 评论 -
BZOJ 1070 [scoi 2007] 修车 (zkw费用流)
题目链接:bzoj 1070尼玛,这道题我开始一直跪着,换了zkw费用流写之后,居然wa了!!!然后心力交瘁的debug发现,我数组开小了= =||。又是神一样的建图。首先由于存在先后顺序,当前在这个技术人员修车的顾客所花的时间会影响下一个在该技术人员修车的顾客。因此,我们暴力拆点,将每个技术人员拆成N个,每个顾客若是倒数第k个在该技术人员这修车,就将该顾客与该技术人员连一条费用为原创 2015-02-17 10:32:00 · 410 阅读 · 0 评论 -
bzoj 3112(zjoi 2013 防守战线) 线性规划+网络流
题目链接http://www.lydsy.com/JudgeOnline/problem.php?id=3112话说这道题真心变态。。。终于见识到了浙江省选的难度了。。。我们根据这道题的样例容易写出这样的不等式组:x2+x3>=1x1+x2+x3+x4+x5>=4x3+x4+x5>=2所求为min{x1+5*x2+6*x3+3*x4+4*x5},其中x[i]表示在i位置修建原创 2015-02-10 11:59:59 · 2695 阅读 · 0 评论 -
BZOJ 1001狼抓兔子(最大流)
Description现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: 左上角点为(1,1),右下角点为(N,M)(上图中N=4,M=5).有以下三种类型的道路 1:(x,y)(x+1,y) 2:(x,y)(x,y+1) 3:(x,y)(x+1原创 2015-02-07 11:34:03 · 522 阅读 · 0 评论 -
hdu 2255 奔小康赚大钱 (最大权匹配,KM算法)
题目链接:hdu 2255#include#include#includeusing namespace std;#define inf (1e8)int N;int A[310][310],lx[310],ly[310],link[310],slack[310];bool visx[310],visy[310];inline int read(){ int x=0,f=1原创 2015-03-12 22:16:19 · 430 阅读 · 0 评论 -
BZOJ 2438 [中山市选2011] 杀人游戏 (图的联通,tarjan)
题目链接:BZOJ 2438首先用tarjan缩点,然后重新建图,找到入度为0的强联通分量,ans为其大小之和。要特判一种情况,即缩点之后的这个点的入度为0,但是它不存在出度,或者是以它引出去的点可以被其他点判断,那么ans--。注意这种情况只能减去一次。代码后面写的有点烦= =。#include#include#include#includeusing namespace std原创 2015-03-07 17:06:47 · 688 阅读 · 0 评论 -
codevs 1222 信与信封问题(二分图匹配,匈牙利算法)
题目链接:codevs 1222这道题算是我二分图匹配的入门吧。。。蒟蒻的入门晚= =。说说这道题吧,这道题是二分图匹配的变形。首先找出最大匹配,如果最大匹配没有N个,那么就输出none。我们知道,如果一个信和信封是唯一对应的,那么删去这条边,将不存在完美匹配。所以我们对于每个信封,删去它与信封对应的边,看是否有完美匹配,如果没有就输出。注意最后要将边加上。#include#incl原创 2015-02-26 14:08:26 · 1005 阅读 · 0 评论 -
bzoj 1433 假期的宿舍(网络流)
题目链接http://www.lydsy.com/JudgeOnline/problem.php?id=1433自己看了一下网上的题解,似乎写的都是二分图,本人脑抽写网络流是因为自己这段时间想写一点网络流的题,然后上网一搜,然后这道题很巧的在名单之内,然后我就balabala的用网络流写了= =||。建图就是以人和床位建立点,加入源点和汇点。对于每个是学校里的人的床位,与汇点T连一条容量为原创 2015-02-10 19:38:07 · 571 阅读 · 0 评论 -
codevs (wikioi)1029遍历问题
题目大意:已知一个ercahishu原创 2014-11-03 18:03:09 · 476 阅读 · 0 评论 -
BZOJ 3571 [HNOI 2014] 画框 (KM算法+分治)
题目链接:思路:用类似于最小乘积生成树求解。最小乘积生成树:每个点有两个权值x,y,求一棵生成树使得sigma(x[i])*sigma(y[i])最小。求解方法:建立平面直角坐标系,将每个点看做坐标(x[i],y[i])。设x[i]*y[i]=k(x[i],y[i]满足大于0),将x[i]除到等式右边y[i]=k/x[i],那么可以联想到反比例函数。对于反比例函数,k的绝对值越原创 2015-03-14 14:05:29 · 1583 阅读 · 0 评论 -
BZOJ 1093 [ZJOI 2007] 最大半连通子图 (tarjan+树形DP)
题目链接:BZOJ 1093tarjan缩点,重新建图,再在图上DP细节:1.重新建图后有重边,需再开一个数组记录是由谁更新得到2.顺着边DP比写记忆化搜索方便3.前后的两个图的边不要搞混#include#include#include#include#includeusing namespace std;#define maxn (100000+10)i原创 2015-03-10 17:47:48 · 487 阅读 · 0 评论 -
BZOJ 2427 [HNOI 2010] 软件安装 (tarjan+树形DP)
题目链接:BZOJ 2427同上一道题。#include#include#include#include#includeusing namespace std;int N,M,idx=0,tot=0;int w[110],v[110],head[110],dfn[110],low[110],vis[110],belong[110];int A[110],B[110],HE原创 2015-03-10 17:52:45 · 576 阅读 · 0 评论 -
hdu 1269 迷宫城堡 (图的联通,tarjan)
题目链接:hdu 1269tarjan水题。我来复习一下tarjan。#include#include#include#includeusing namespace std;#define maxn (10000+10)int N,M,tot,idx;int head[maxn],dfn[maxn],low[maxn],belong[maxn];bool vis[maxn原创 2015-03-07 17:13:59 · 404 阅读 · 0 评论 -
BZOJ 1562 [NOI2009]变换序列 (二分图匹配)
题目链接:BZOJ 1562#include#include#include#includeusing namespace std;const int maxn = 10000 + 10;int N;bool vis[2 * maxn];int head[2 * maxn], belong[2 * maxn], choose[2 * maxn], d[10];原创 2015-04-13 21:01:53 · 520 阅读 · 0 评论