
图论
文章平均质量分 59
会飞的小蛇
这个作者很懒,什么都没留下…
展开
-
(二分+最小生成树)洛谷P2619 [国家集训队]Tree I
洛谷P2619 [国家集训队]Tree I思路:很显然的最小生成树,但是强制我们用needneedneed条白色的边。我们可以二分一个值xxx,让所有的白色边都加上xxx。这样就能够让白边靠前或者靠后。最终的答案就是最小生成树求出来的权值减去加上的总和。代码:#include<bits/stdc++.h>#define fi first#define se second#define ll long long#define mp make_pair#define pb push原创 2021-07-28 22:41:57 · 195 阅读 · 0 评论 -
最小树形图(朱刘算法)
思路:最小树形图就是在有向图中,以一个点为根的有向生成树,并且边权值和最小。思路大体上是贪心。1、贪心地选取每个点最小的入边。2、存在环则缩点,将其余边权值减去这个边终点的最小入边值。因为这相当于删除这个边的原来入边,再加上另外一条边。3、重复1,2直到无环。复杂度为O(NM)O(NM)O(NM)。Tarjan更快的算法还不会。代码:#include<bits/stdc++.h>#define pii pair<int,int>#define ll long lo原创 2021-05-17 20:00:02 · 506 阅读 · 0 评论 -
图的绝对中心
图的绝对中心的定义是图上一个点(可以在结点上也可以在边上)到图上所有点的距离最大值最小。我们可以得到,到图绝对中心距离相等的点有两个。我们用d(i,j)d(i,j)d(i,j)表示结点iii到jjj的最短距离,rk(i,j)rk(i,j)rk(i,j)表示第iii个结点到其他结点距离中第jjj小的那个。假设图的绝对中心在结点上,那么肯定用距离最远的来更新,所以ans=min(ans,d(i,rk(i,n))∗2)ans=\min(ans,d(i,rk(i,n))*2)ans=min(ans,d(i,原创 2021-04-30 21:36:41 · 749 阅读 · 2 评论 -
(Prufer序列)洛谷P4430小猴打架
洛谷P4430小猴打架思路:求nnn个结点,通过不同的连接方式生成的树有多少种。通过Prufer序列,nnn个结点不同的生成树有nn−2n^{n-2}nn−2种。又因为这n−1n-1n−1条边可以以任意顺序连上,所以乘上这n−1n-1n−1条边全排列的数量,即(n−1)!nn−2(n-1)!n^{n-2}(n−1)!nn−2种。代码:#include<bits/stdc++.h>#define pii pair<int,int>#define int long long原创 2021-04-01 12:24:58 · 194 阅读 · 0 评论 -
(同余最短路)洛谷P3403跳楼机
洛谷P3403跳楼机思路:由题,我们可到达的楼层为ax+by+cz(a,b,c≥0)ax+by+cz(a,b,c\ge0)ax+by+cz(a,b,c≥0)。我们假设一个数kkk是只通过操作2,3得到的,即k=by+czk=by+czk=by+cz。式子就变成了求满足ax+k≤hax+k\le hax+k≤h中xxx的数量。易得,通过操作1,能够到达的楼层数量为⌊h−kx⌋+1\lfloor\cfrac{h-k}{x}\rfloor+1⌊xh−k⌋+1。考虑去掉重复的部分。因为如果存在k1≡k2(原创 2021-03-28 09:34:52 · 224 阅读 · 0 评论 -
(Prufer序列)洛谷P2624 [HNOI2008]明明的烦恼
洛谷P2624 [HNOI2008]明明的烦恼思路:设要求度数的点有kkk个,sum=∑i=1k(di−1)sum=\sum\limits_{i=1}^{k}(d_i-1)sum=i=1∑k(di−1)。如果di=0d_i=0di=0或sum>n−2sum>n-2sum>n−2都是原创 2021-03-26 23:34:50 · 183 阅读 · 0 评论 -
(Prufer序列)牛客挑战赛48C.铬合金之声
牛客挑战赛48C.铬合金之声思路:首先由题很显然的一个结论就是,这是由nnn个点构成的有n−mn-mn−m棵无根树的森林。考虑权值的计算。假设第iii棵树的大小为sis_isi,权值就为∏i=1n−msi\prod\limits_{i=1}^{n-m}s_ii=1∏n−msi。但是这样的话,又要考虑乘上方案数,并且每种方案都需要分开考虑。很巧妙的一步就是,将无根树转换为有根树,因为有根树的方案数就等于无根树的方案数乘上结点树,恰好是我们需要的贡献。所以转换成了求nnn个点构成n−mn-mn−m原创 2021-03-25 19:37:16 · 173 阅读 · 0 评论 -
CF156D. Clues
CF156D. Clues题意:给一个nnn个点mmm条边的无向图,用最少的边使它们连通的方案数,取模ppp后输出。思路:通过并查集判断点连通,统计每个连通块的大小。连通块为111的时候特判一下,其他的情况就是模板题了,答案为nk−2∏i=1knumin^{k-2}\prod\limits_{i=1}^{k}num_ink−2i=1∏knumi,kkk为连通块的数量,numinum_inumi为每个连通块的大小。(证明)代码:#include<bits/stdc++.h>#d原创 2021-03-25 17:06:25 · 229 阅读 · 0 评论 -
树/图连通方案数
1、通过Cayley定理,可以得到nnn个结点的无根树个数为nn−2n^{n-2}nn−2,证明参考Purfer序列。2、那么一棵结点数为nnn的有根树,就是在无根树的基础上面选定一个根,那么就是nn−1n^{n-1}nn−1种。3、nnn个结点,每个结点度数为did_idi的树。首先满足∑i=1ndi−1=n−2,di≠0\sum\limits_{i=1}^{n}d_i-1=n-2,d_i\neq 0i=1∑ndi−1=n−2,di=0。由Purfer序列的性质可以得到,度数为did_id原创 2021-03-24 20:58:14 · 985 阅读 · 4 评论 -
(生成树计数)洛谷P2290 [HNOI2004]树的计数
洛谷P2290 [HNOI2004]树的计数思路:通过Purfer序列我们可以得到,度数为did_idi的点会在序列中出现di−1d_i-1di−1次。那么就相当于这些数求全排列的方案数,所以答案就为(n−2)!∏i=1n(di−1)!\cfrac{(n-2)!}{\prod\limits_{i=1}^{n} (d_i-1)!}i=1∏n(di−1)!(n−2)!。以及再加上一些特判,比如n=1,∑i=1ndi−1≠n−2n=1,\sum\limits_{i=1}^{n} d_i-1\neq原创 2021-03-24 20:43:14 · 140 阅读 · 0 评论 -
(费用流)洛谷P4068 [SDOI2016]数字配对
洛谷P4068 [SDOI2016]数字配对思路:二分图,将偶数个质因子和奇数个质因子分成二分图,跑费用流即可。代码:#include<bits/stdc++.h>#define pii pair<int,int>#define int long long#define cl(x,y) memset(x,y,sizeof(x))#define loop(x,y,z) for(x=y;x<=z;x++)#define reve(x,y,z) for(x=y;x&原创 2021-01-26 01:02:39 · 158 阅读 · 0 评论 -
(最短路+费用流)洛谷P4542 [ZJOI2011]营救皮卡丘
洛谷P4542 [ZJOI2011]营救皮卡丘思路:定义dis[u][v](u>v)dis[u][v](u>v)dis[u][v](u>v)为uuu到vvv且不经过编号大于vvv节点的最短路。用最短路可以求得。然后建图跑费用流。建图:拆点,把iii拆成i,i′i,i^{'}i,i′。1、SSS到000建(S,0,k,0)(S,0,k,0)(S,0,k,0)。2、SSS到节点iii建(S,i,1,0)(S,i,1,0)(S,i,1,0)。3、节点i′i^{'}i′到TTT建(i原创 2021-01-25 00:07:13 · 191 阅读 · 0 评论 -
(费用流)洛谷P4307 [JSOI2009]球队收益 / 球队预算
洛谷P4307 [JSOI2009]球队收益 / 球队预算思路:非常有意思的一道题目。我们可以发现球队支出的费用与胜负有关,并且一场比赛一定有一个赢,一个输。我们不妨假设对于所有的比赛,每个球队都输掉的情况,并且找出mmm个赢球的球队支出最小的情况。假设一直球队从输一场球变成赢一场球,那么应该增加的费用为:c(a+1)2+d(b−1)2−(ca2+db2)=c(2a+1)−d(2b+1)c(a+1)^2+d(b-1)^2-(ca^2+db^2)=c(2a+1)-d(2b+1)c(a+1)2+d(b原创 2021-01-24 22:10:07 · 166 阅读 · 1 评论 -
(费用流)洛谷P4237 荒芜的海洋
洛谷P4237 荒芜的海洋思路:建图:将点iii拆成入点iii和出点i′i^{'}i′。1、对于每个雇佣兵建(S,pi,1,qi)(S,p_i,1,q_i)(S,pi,1,qi)的边。2、对于每个岛建(i,i′,inf,ai),ai(i,i^{'},inf,a_i),a_i(i,i′,inf,ai),ai指岛上的怪兽数量。3、对于每条路建(u′,v,inf,w)(u^{'},v,inf,w)(u′,v,inf,w)和(v′,u,inf,w)(v^{'},u,inf,w)(v′,u,inf原创 2021-01-24 21:16:59 · 169 阅读 · 0 评论 -
(质因数分解+二分图)LightOJ1356Prime Independence
LightOJ1356Prime Independence题意:给你nnn个数,你选出最多的一个集合满足不存在其中任意两数a,ba,ba,b满足a=k×b,ka=k\times b,ka=k×b,k是一个质数。思路:最大独立点集=n−=n-=n−二分图最大匹配数。我们可以通过唯一分解定理判断数字xxx的因子个数,可以知道如果因子个数同为奇数或者偶数,那么它们肯定不可能匹配。所以按照因数的奇偶将图分成二分图,进行连边。注意我们在判断两个数之间是否需要连边的时候,应该是记录一个数的因子进行除法判断得到原创 2021-01-24 01:12:36 · 205 阅读 · 0 评论 -
(费用流)洛谷P4014 分配问题、P4015 运输问题
洛谷P4014 分配问题思路:显然一个最小费用最大流,一个最大费用最大流。只需要将权值取反再求一次即可。代码:#include<bits/stdc++.h>#define pii pair<int,int>#define ll long long#define cl(x,y) memset(x,y,sizeof(x))#define loop(x,y,z) for(x=y;x<=z;x++)#define reve(x,y,z) for(x=y;x>=z原创 2021-01-22 23:22:26 · 203 阅读 · 0 评论 -
(费用流)洛谷P3967 [TJOI2014]匹配
洛谷P3967 [TJOI2014]匹配思路:第一问很简单,就是带权二分图的完美匹配。用最大费用最大流可以求出。第二问就是求最大费用最大流的必经边,那么枚举删除每条边看看费用是否会改变,改变的话就是必经边。由于第一问已经求出了匹配的方案,所以不用枚举删除每条边,只需要枚举去删除每组匹配的边即可。代码权值取反,算的是最小费用最大流。代码:#include<bits/stdc++.h>#define pii pair<int,int>#define ll long lon原创 2021-01-22 23:02:20 · 183 阅读 · 0 评论 -
(费用流)洛谷P3965 [TJOI2013]循环格
洛谷P3965 [TJOI2013]循环格思路:非常好的一题网络流,一开始根本想不到。可以发现,循环格满足入度=出度=111。简单证明就是,一个n×mn\times mn×m的矩阵,每个格点都有一条出边,出度为111,如果入度=000,那么就无法到达,所以形成不了循环格;如果入度>1>1>1,那么就会存在其他点的入度为000。那么我们就可以将一点(i,j)(i,j)(i,j)拆成(i,j)(i,j)(i,j)和(i,j)′(i,j)^{'}(i,j)′。建图:1、SSS向(i,原创 2021-01-22 22:24:12 · 158 阅读 · 0 评论 -
(费用流+01分数规划)洛谷P3705 [SDOI2017]新生舞会
洛谷P3705 [SDOI2017]新生舞会思路:∵C=∑a∑b\because C=\cfrac{\sum a}{\sum b}∵C=∑b∑a∴∑a−C∑b=0\therefore \sum a-C\sum b=0∴∑a−C∑b=0二分,令w=a−mid×bw=a-mid\times bw=a−mid×b,如果mid>cmid>cmid>c,那么∑w<0\sum w<0∑w<0,否则∑w>0\sum w>0∑w>0。现在就转化为是权值为a−原创 2021-01-22 18:15:46 · 140 阅读 · 0 评论 -
(费用流)洛谷P3440 [POI2006]SZK-Schools
洛谷P3440 [POI2006]SZK-Schools思路:这就相当于一个带权的二分图匹配。设学校用点i∈[1,n]i\in[1,n]i∈[1,n]表示,注意这里不是学校的原始编号,因为会重合。用第iii个学校的原来编号为mim_imi。新的编号用点j∈[n+1,2×n]j\in[n+1,2\times n]j∈[n+1,2×n]表示。1、SSS向每个iii建(S,i,1,0)(S,i,1,0)(S,i,1,0)的边。2、每个jjj向TTT建(j,T,1,0(j,T,1,0(j,T,1,0的边原创 2021-01-22 17:10:23 · 150 阅读 · 1 评论 -
(费用流)洛谷P3356 火星探险问题
洛谷P3356 火星探险问题思路:这题建图并不是很难,和洛谷P2045 方格取数加强版很相似。将一个点(i,j)(i,j)(i,j)拆成入点(i,j)(i,j)(i,j)和出点(i,j)′(i,j)^{'}(i,j)′。1、SSS向(1,1)(1,1)(1,1)建流量为kkk,费用为000的边。2、(n,m)′(n,m)^{'}(n,m)′向TTT建流量为kkk,费用为000的边。3、每个点对向东或者向南可以走的点连流量为infinfinf,费用为000的边。4、每个点(i,j)(i,j)(i原创 2021-01-22 16:55:11 · 185 阅读 · 0 评论 -
(费用流)洛谷P2604 [ZJOI2010]网络扩容
洛谷P2604 [ZJOI2010]网络扩容思路:很显然第一问最大流,第二问费用流。对于第一问,可以将流量的费用全部设为000,建(u,v,c,0)(u,v,c,0)(u,v,c,0)的边,这样跑费用流就可以得到答案。在这个残留网络上,我们可以再建一个(u,v,inf,w)(u,v,inf,w)(u,v,inf,w)的边,再设一个超级源点SSS连向111,建(S,1,k,0)(S,1,k,0)(S,1,k,0)的边,再跑一次费用流就可以了。可以理解为第一问是免费的一个流量,第二问是加上单位流量需要的原创 2021-01-22 15:09:50 · 159 阅读 · 0 评论 -
(费用流)洛谷P2469 [SDOI2010]星际竞速
洛谷P2469 [SDOI2010]星际竞速思路:可以看出这是最小路径覆盖问题,最小路径覆盖=n−=n-=n−最大匹配数。所以这题就是最小费用最大流。建图:1、源点SSS向每个入点iii建(S,i,1,0)(S,i,1,0)(S,i,1,0)的边。2、每个出点i′i^{'}i′向汇点TTT建(i′,T,1,0)(i^{'},T,1,0)(i′,T,1,0)的边。3、源点SSS向每个出点i′i^{'}i′建(S,i′,1,Ai)(S,i^{'},1,A_i)(S,i′,1,Ai)的边。4、每组原创 2021-01-22 14:55:40 · 161 阅读 · 0 评论 -
(费用流)洛谷P2517 [HAOI2010]订货
洛谷P2517 [HAOI2010]订货思路:建图:1、源点SSS向每个月iii连(S,i,inf,di)(S,i,inf,d_i)(S,i,inf,di)的边。2、每个月iii向汇点TTT连(i,T,ui,0)(i,T,u_i,0)(i,T,ui,0)的边。3、每个月i∈[1,n)i\in[1,n)i∈[1,n)向下个月连(i,i+1,S,m)(i,i+1,S,m)(i,i+1,S,m)的边,这里的SSS是仓库容量。然后跑最小费用最大流就行了。代码:#include<bits/s原创 2021-01-19 20:31:28 · 128 阅读 · 0 评论 -
(费用流)洛谷P2053 [SCOI2007]修车
洛谷P2053 [SCOI2007]修车思路:如果总的等待时间为sumsumsum,那么平均等待时间为sumn\cfrac{sum}{n}nsum,而nnn已经确定,为了使答案尽可能小,sumsumsum应该尽可能小。假设nnn辆车的修车速度分别为T1,T2,⋯ ,TnT_1,T_2,\cdots,T_nT1,T2,⋯,Tn。可以得到第iii个人的等待时间为∑j=1iTj\sum\limits_{j=1}^{i}T_jj=1∑iTj。所以总的等待时间为sum=∑i=1n∑j=1iTj=原创 2021-01-19 17:14:51 · 230 阅读 · 2 评论 -
(费用流)洛谷P2045 方格取数加强版
洛谷P2045 方格取数加强版思路:选取一个点只有一次贡献,但是他可以走无数次,又限制了kkk次。所以如下建图:1、每个点拆点成入点iii和出点i′i^{'}i′,建一条(i,i′,1,ai,j)(i,i^{'},1,a_{i,j})(i,i′,1,ai,j)的边,和一条(i,i′,inf,0)(i,i^{'},inf,0)(i,i′,inf,0)的边,表示只有一次的费用是ai,ja_{i,j}ai,j,走多次的费用是000。2、源点SSS连向(1,1)(1,1)(1,1),流量为kkk,费用为原创 2021-01-19 10:53:44 · 228 阅读 · 0 评论 -
(费用流)洛谷P2153 [SDOI2009]晨跑
洛谷P2153 [SDOI2009]晨跑思路:·要求路程尽可能短,天数尽可能长,那么肯定是最小费用最大流了。天数作为流量,路程作为费用。按照要求,每个路口只能走一次,这个就是不重复选取的问题,在最大流中的最长不下降子序列问题有涉及到,解决的办法就是将点拆开,设入点为iii,出点为i′i^{'}i′。然后在之间建一条流量为111的边。这里也是相同的,只需要拆点后建一条流量为111,费用为000的边即可。由于111和nnn可以使用无限次,所以111和1′1^{'}1′,nnn和n′n^{'}n′之间的流原创 2021-01-19 10:02:57 · 160 阅读 · 0 评论 -
(费用流)洛谷P4452 [国家集训队]航班安排
洛谷P4452 [国家集训队]航班安排思路:又有贡献,又有边权,又有限制,一看就是网络流。考虑如何建图。如果建图的对象是机场,那还需要对时间进行分层,很复杂。那么就以请求建图,将请求拆成两个点,出点和入点,出点是出发的时间,入点的到达的时间,两点之间连一条流量为111,费用为ccc的边,这样控制了请求只有一次贡献。判断从000号机场飞到aaa的时间满不满足,满足可以建一个从源点到入点流量为infinfinf,费用为−f[0][a]-f[0][a]−f[0][a]的边。再建一个超级源点,连向源点,原创 2021-01-19 07:54:03 · 247 阅读 · 0 评论 -
(最小费用最大流)洛谷P3381【模板】最小费用最大流
洛谷P3381【模板】最小费用最大流思路:在一个网络中,每条边有一个流量fff和费用www,表示限制的流量和每单位流量需要花费的费用。最小费用最大流也叫费用流,就是求在最大化∑f\sum f∑f的情况下,最小化∑f×w\sum f\times w∑f×w。那么我们将求增广路的BFS替换成SPFA就可以从求任意增广路到求一条从sss到ttt的最短路的增广路。代码:#include<bits/stdc++.h>#define pii pair<int,int>#define原创 2021-01-19 06:58:39 · 272 阅读 · 0 评论 -
(分层图)洛谷P4568[JLOI2011]飞行路线
洛谷P4568 [JLOI2011]飞行路线思路:分层图是对于一些边权的操作,可以将图从二维的引入操作次数kkk作为第三维。将图复制成k+1k+1k+1份,并且上一份的连向下一份的边权值是修改的权值。代码:#include<bits/stdc++.h>#define pii pair<int,int>#define ll long long#define cl(x,y) memset(x,y,sizeof(x))#define loop(x,y,z) for(x=y原创 2021-01-17 17:59:18 · 221 阅读 · 0 评论 -
(最小割)洛谷P4474 王者之剑
洛谷P4474 王者之剑思路:显然求二分图最大权独立点集。把点进行黑白染色。SSS向白点建边,权值为vi,jv_{i,j}vi,j;白点向周围的黑点建边,权值为infinfinf;黑点向TTT建边,权值为vi,jv_{i,j}vi,j。总权值减去最小割就是答案。代码:#include<bits/stdc++.h>#define pii pair<int,int>#define int long long#define cl(x,y) memset(x,y,原创 2020-11-19 17:59:21 · 161 阅读 · 1 评论 -
(最小割)洛谷P4313文理分科
洛谷P4313文理分科思路:一下子就可以想到最小割,先不考虑一起选的情况的话,就是文理二者择其一的选择。SSS向(i,j)(i,j)(i,j)建边,权值为arti,jart_{i,j}arti,j;(i,j)(i,j)(i,j)向TTT建边,权值为sciencei,jscience_{i,j}sciencei,j。考虑共同选理科,那么我们可以新建一个点(i,j)′(i,j)^{'}(i,j)′,SSS向(i,j)′(i,j)^{'}(i,j)′连边,权值为same_arti,jsame\_ar原创 2020-11-19 17:41:38 · 182 阅读 · 0 评论 -
(二分图+最大点数独立集)洛谷P4304 [TJOI2013]攻击装置
洛谷P4304 [TJOI2013]攻击装置思路:最大点数独立集=总点数-最大匹配数。独立集是指:一个点集,点集中的各点没有关系。代码:#include<bits/stdc++.h>#define pii pair<int,int>#define int long long#define cl(x,y) memset(x,y,sizeof(x))#define ct cerr<<"Time elapsed:"<<1.0*clock()/CLO原创 2020-11-18 23:29:44 · 178 阅读 · 0 评论 -
(最大权闭合子图)洛谷P4174 [NOI2006]最大获利
洛谷P4174 [NOI2006]最大获利思路:基础的最大权闭合子图。SSS向每个用户iii建边,权值为CiC_iCi;每个用户iii向需要的两个中转站Ai,BiA_i,B_iAi,Bi建边,权值为infinfinf;每个中转站向TTT建边,权值为PiP_iPi。答案为CiC_iCi总和减去最小割。代码:#include<bits/stdc++.h>#define pii pair<int,int>#define int long long#defin原创 2020-11-18 22:54:20 · 170 阅读 · 0 评论 -
(计算几何+二分+网络流)P4048 [JSOI2010]冷冻波
P4048 [JSOI2010]冷冻波思路:首先我们可以假设如果有ansansans分钟的话,巫妖可以攻击⌊anst⌋+1\lfloor\cfrac{ans}{t}\rfloor+1⌊tans⌋+1次,因为在第000秒就可以开始攻击。很显然的一个建图就是:SSS向每个巫妖建边,权值为⌊anst⌋+1\lfloor\cfrac{ans}{t}\rfloor+1⌊tans⌋+1;每个巫妖向自己能过攻击到的精灵建边,权值为111;每个精灵向TTT建边,权值为111。然后判断最大流是不是等于mmm原创 2020-11-18 17:12:26 · 167 阅读 · 0 评论 -
(最大权闭合子图)洛谷P3872[TJOI2010]电影迷
洛谷P3872[TJOI2010]电影迷思路:最大权闭合子图的一种变形。SSS向正边权的点连边,权值为vxv_xvx;负边权的点向TTT连边,权值为∣vx∣|v_x|∣vx∣;每对XXX向YYY连边,权值为dx,yd_{x,y}dx,y。然后正边权和减去最小割就是答案。代码:#include<bits/stdc++.h>#define pii pair<int,int>#define int long long#define cl(x,y) memset(原创 2020-11-17 22:06:08 · 159 阅读 · 0 评论 -
(最小割)洛谷P3866[TJOI2009]战争游戏
洛谷P3866[TJOI2009]战争游戏思路:简单的可以想到,我们应该在SSS和敌人直接建边,在边界与TTT之间建边,求的就是最小割。那么怎么表示割掉一条边?如果把一个点和他相邻的点连起来,边权值为其中一个点权值的话,那么就可能存在这个点被多次割掉。那么又要用到拆点,把点拆成入点和出点。然后便可以建如下的图:障碍物不处理;SSS连接每个敌人的入点,权值为infinfinf;每个点的入点连接自己的出点,权值为点权值,敌人的点的权值设为infinfinf。每个点的出点连接四周点的入点,权值为i原创 2020-11-17 15:58:17 · 155 阅读 · 0 评论 -
(最大流)洛谷P3410拍照
P3410 拍照思路:最大权闭合子图。SSS向MMM个人每个人建边,权值为支付的费用;MMM个人分别向每个人需要照相的下属建边,权值为infinfinf;每个下属向TTT建边,权值为需要的费用。能得到的钱减去最小割就是答案。代码:#include<bits/stdc++.h>#define pii pair<int,int>#define int long long#define cl(x,y) memset(x,y,sizeof(x))#define ct原创 2020-11-17 10:41:20 · 202 阅读 · 0 评论 -
(网络流)洛谷P3254圆桌问题
洛谷P3254圆桌问题思路:最近做到的最舒服的网络流了。源点向每个单位建边,权值为rir_iri;每个单位向每个餐桌建边,权值为111;每个餐桌向汇点建边,权值为cic_ici;如果跑最大流的结果为∑ri\sum r_i∑ri的话就是可以分配的。代码:#include<bits/stdc++.h>#define pii pair<int,int>#define int long long#define cl(x,y) memset(x,y,sizeof(x原创 2020-11-16 23:01:51 · 222 阅读 · 0 评论 -
(二分+最大流)洛谷P3153[CQOI2009]跳舞
洛谷P3153[CQOI2009]跳舞思路:拆点+二分+最大流:将男生,女生都拆成两个点,喜欢的点和不喜欢的点,二分答案ansansans。SSS向男生的喜欢点连边,权值为ansansans;男生喜欢的点向男生不喜欢的点连边,权值为kkk;女生不喜欢的点向女生喜欢的点连边,权值为kkk;女生喜欢的点向TTT连边,权值为ansansans;男生喜欢和不喜欢的点分别向女生喜欢不喜欢的点连边,权值为111。然后判断跑出来的值是否等于ans∗nans*nans∗n。代码:#include<原创 2020-11-15 13:28:35 · 188 阅读 · 0 评论