网络流与二分图
wanherun
今天会有好事发生吗
展开
-
bzoj3438 小M的作物
题目一眼最小割,其实和大多模型是一样的。也比较套路,就是用总价值减去最小割就好了,对于这道题。源点连向耕地再连向汇点,对于每一个额外收益,然后拆成两个点,之后的连法也就差不多了。#include<bits/stdc++.h>#define inf 100000000#define N 4100010 using namespace std;int dis[N+5],first[N+5],n原创 2017-12-03 19:37:24 · 291 阅读 · 0 评论 -
bzoj1191 [HNOI2006]超级英雄Hero
题目显然,一个题目对应多个锦囊,显然是最大匹配,匈牙利算法上。值得注意的是,从1~n,只要有一个找不到匹配,就直接退出,注意读题233。//匈牙利算法最大匹配#include<bits/stdc++.h>#define N 10010using namespace std;int n,m,ans;bool used[N+1];int G[N+1][2],lk[N+1];inline c原创 2017-08-29 07:43:13 · 308 阅读 · 0 评论 -
bzoj1412 [ZJOI2009]狼和羊的故事
题目我们也可以很容易看出,我们就要把狼和羊分成两个集合,这也是最小割。 我们来建图。首先,源点连向狼,容量为无限大,这样是为了防止这样被割掉。羊连向汇点,容量也为无限大。之后就是狼羊草之间的建边了。我们把狼连向草和羊,草连向草和羊,以上边容量为1。#include<bits/stdc++.h>#define inf ~0u>>1#define N 10005#define id(i,j) (原创 2017-08-30 07:40:47 · 285 阅读 · 0 评论 -
bzoj1433 [ZJOI2009]假期的宿舍
题目再次根据数据猜算法,233,网络流跑二分图匹配吧。每个人需要一张床,所以就是床与人匹配。 然后根据题目描述来建边。#include<bits/stdc++.h>#define N 150#define M 3000#define inf ~0u>>1using namespace std;int n,cnt,T,S,bed[N+1],x,ans,Case;int first[N+1原创 2017-08-30 07:41:04 · 250 阅读 · 0 评论 -
bzoj1934 [Shoi2007]Vote 善意的投票
题目同样的,我们也是分成赞同与不赞同两个集合,也是最小割。把源点连向赞同,容量为1,不赞同连向汇点,容量为1,再考虑每个人之间的影响,把互相为好朋友之间连双向边,容量为1。这还是比较简单的网络流。#include<bits/stdc++.h>#define inf ~0u>>1#define N 305#define M 200000using namespace std;int n,m,原创 2017-08-30 07:41:17 · 260 阅读 · 0 评论 -
bzoj2127 happiness
题目看看数据范围,貌似是网络流,so,我们来建建图。把源点接向学理科的学生,容量为他学习理科的价值。 把学文科的学生接向汇点,容量为他学习文科的价值。 学生之间接双向边,容量为互相学习文理科价值的一半。这样后,先把所有价值加起来,再减掉多余的。其实,我们需要把文理科分成两个集合,就是割,求个最小割。#include<bits/stdc++.h>#define N 10005#define i原创 2017-08-30 07:41:34 · 247 阅读 · 0 评论 -
bzoj1854 [Scoi2010]游戏
题目首先,很简单可以发现,这也是一个二分图,很好理解,和bzoj1191 [HNOI2006]超级英雄Hero差不多,还是比较容易的。这里,我要说另一种做法,巧妙运用并查集来维护。把一个装备的两个值之间连边,若构成环,就都可以表示,链的话,就减个一。强啊。#include<bits/stdc++.h>#define N 10000using namespace std;int n,f[N+1]原创 2017-09-06 21:52:42 · 258 阅读 · 0 评论 -
bzoj1305 [CQOI2009]dance跳舞
题目n<=50,不用说些什么了吧,网络流呀。怎么跑呢?注意到,两个人之间的关系有喜欢与不喜欢,所以可以想到拆点,然后用关系建边,然后每人的两个点之间建一条容量为k的边,源点连向男生,女生连向汇点,这样就可以了。日常语文不好,画个图吧。 3 1 YYN NYY YNY图丑233 能看吧。。。之后如何计算答案呢?显然满足二分性质。。源汇点的边连容量为二分的mid,然后满足这些边满流即可。#in原创 2017-09-12 10:35:33 · 179 阅读 · 0 评论 -
bzoj1001 [BeiJing2006]狼抓兔子
题目不能让狼去终点,代价最小。。 又是一道最小割。第一道最小割,记录一下。不过模板写的真的丑233。#include<bits/stdc++.h>#define MAXN 1000001#define id(i,j) (i-1)*m+jusing namespace std;int first[1000001],nex[6*MAXN+1],to[6*MAXN+1],cap[6*MAXN+1原创 2017-09-13 18:37:09 · 183 阅读 · 0 评论 -
bzoj2718 [Violet 4]毕业旅行
题目怕是一道ctsc原题。请参见这里#include<bits/stdc++.h>#define N 200using namespace std;int n,m,G[N+1][N+1],lk[N+1],x,y;int cnt;bool used[N+1];inline char nc(){ static char buf[100000],*p1=buf,*p2=buf;原创 2017-09-26 10:51:57 · 243 阅读 · 0 评论 -
bzoj1711 [Usaco2007 Open]Dining吃饭
题目网络流题目,复习一下版子。建模还是比较简单的,从S连向每一个食物,每一个饮料连向T。牛拆点,按照喜好连线就好了。#include<bits/stdc++.h>#define N 500#define M 50000#define inf 10000000using namespace std;int first[N+5],nxt[M+5],to[M+5],siz,fl[M+5];in原创 2017-10-09 22:31:00 · 226 阅读 · 0 评论 -
bzoj3396 [Usaco2009 Jan]Total flow 水流
题目看一看题目描述,蜜汁熟悉,这,这不就是裸的最大流吗。也好,马上noip了,复习一下。#include<bits/stdc++.h>#define N 100000#define inf 10000000using namespace std;int n,x,y,v;int first[N+5],nxt[N+5],to[N+5],fl[N+5],siz;int dis[N+5];in原创 2017-10-31 21:42:39 · 244 阅读 · 0 评论 -
bzoj1143 [CTSC2008]祭祀river
题目CTSC的题,反正没参加过,据说是暴力大赛,233。根据题意,就是选一些点,之间不能到达,最大独立集!!floyd处理一下就直接上匈牙利算法吧。#include<bits/stdc++.h>#define N 100using namespace std;int n,m,G[N+1][N+1],lk[N+1],x,y;int cnt;bool used[N+1];inline cha原创 2017-08-29 07:42:19 · 313 阅读 · 0 评论