随笔分类 -  网络流—最小费用最大流

摘要:脑子不太清楚一个zz问题调了好久…… 首先正难则反,因为三元环好像没什么特点,就考虑让非三元环个数最小 考虑非三元环特点,就是环上一定有一个点的入度为2,联系整张图,三元环个数就是每个点C(入度,2)的和 把无向边看成点,这样的点会向两端点的一个贡献一个入度,所以建图,s连这些点流量1费用0,这些边 阅读全文
posted @ 2019-04-24 21:43 lokiii 阅读(107) 评论(0) 推荐(0)
摘要:玄妙的建图…… 这种平衡度数的题按套路是先黑白染色然后分别连ST点,相邻格子连黑向白连费用1流量0的边,然后考虑费用怎么表示 把一个点拆成五个,上下左右中,中间点黑白染色连ST, 对于连S的点,中点连它不转时候的四边点(有哪个连哪个)流量1费用0的边。 然后考虑转的费用,因为这里已经拆点了,所以在里 阅读全文
posted @ 2019-04-23 15:22 lokiii 阅读(174) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2019-02-14 18:02 lokiii 阅读(4) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2018-08-17 20:34 lokiii 阅读(3) 评论(0) 推荐(0)
摘要:参考:https://blog.csdn.net/Quack_quack/article/details/50554032 神建图系列 首先把问题转为全填上,最少扣下来几个能符合条件 先考虑第2个条件,枚举f为一个每行/列最大剩几个,然后记录一下每行列的零件个数(包括填上的) 然后建图 s向所有行连 阅读全文
posted @ 2018-04-24 11:06 lokiii 阅读(175) 评论(0) 推荐(0)
摘要:考试题搞了好久也没懂…… 正解应该是线性规划 https://www.cnblogs.com/CQzhangyu/p/7894559.html ~~可是不会写啊~~ 如果从网络流的角度来体会大概是这样 http://blog.csdn.net/clover_hxy/article/details/7 阅读全文
posted @ 2018-02-25 22:42 lokiii 阅读(380) 评论(0) 推荐(0)
摘要:第一问直接跑最大流即可。建图的时候按照费用流建,费用为0. 对于第二问,在第一问dinic剩下的残量网络上建图,对原图的每条边(i,j),建(i,j,inf,cij),表示可以用c的花费增广这条路。然后从新建一个源点,连(s,1,k,0)表示要增加k的流量。跑最小费用最大流即可。 阅读全文
posted @ 2018-02-12 13:12 lokiii 阅读(136) 评论(0) 推荐(0)
摘要:神奇的建图:连接(s,1,inf,0)(n+1,t,inf,0),对于1~n连接(i,i+1,inf a[i],0),对于每个志愿者(s,t,c),连接(s,t+1,inf,c)。 因为从s开始的流是inf的,到t的也是inf,但是每个点的流量少它所需要的志愿者数量那么多,所以少的流量需要用带权的志 阅读全文
posted @ 2018-02-12 08:19 lokiii 阅读(131) 评论(0) 推荐(0)
摘要:一开始从客人角度想的,怎么建都不对 从一个修车工所接待的所有顾客花费的总时间来看,设一共有x个人,那么第一个修的对总时间的贡献是x\ w1,第二个是(x 1)\ w2…以此类推。所以把第i个修车工拆成n组m个,第j组表示i修车工修第j个顾客的车,第j组第k个表示i修车工修第(n k+1)个修第j个顾 阅读全文
posted @ 2018-02-11 20:53 lokiii 阅读(101) 评论(0) 推荐(0)
摘要:求出平均数sum,对于大于sum的点连接(s,i,a[i] sum,0),表示这个点可以流出多余的部分,对于小于sum的点连接(i,t,sum a[i],0)表示这个点可以接受少的部分,然后每个点向相邻的两个点连(i,j,inf,1)表示可以任意转移,每转移一份产生1费用,注意这是个环所以首尾相连。 阅读全文
posted @ 2018-02-11 14:02 lokiii 阅读(110) 评论(0) 推荐(0)
摘要:s向仓库i连ins(s,i,a[i],0),商店向t连ins(i+m,t,b[i],0),商店和仓库之间连ins(i,j+m,inf,c[i][j])。建两次图分别跑最小费用最大流和最大费用最大流即可。 cpp include include include include using namesp 阅读全文
posted @ 2018-02-11 13:43 lokiii 阅读(156) 评论(0) 推荐(0)
摘要:其实KM更快……但是这道题不卡,所以用了简单粗暴的费用流,建图非常简单,s向所有人连流量为1费用为0的边来限制流量,所有工作向t连流量为1费用为0的边,然后对应的人和工作连(i,j,1,cij),跑一遍最小费用最大流再跑一遍最大费用最大流即可。方便起见直接重建图了。 cpp include incl 阅读全文
posted @ 2018-02-11 13:26 lokiii 阅读(353) 评论(0) 推荐(0)
摘要:分层图,建k层,设(i,j,0)为点(i,j)的满油状态,全图的流量都是1,因为重复走到一个点没有意义。如果当前点是加油站,那么它向它上左的点连费用为a的边,向下右连费用为a+b的边; 否则,这个点的所有层向零层连费用为a+c的边表示建加油站和加油,其他的当前点是加油站的情况连即可,但是不用加a。然 阅读全文
posted @ 2018-02-10 18:55 lokiii 阅读(226) 评论(0) 推荐(0)
摘要:建图细节比较多,对于每个点i,拆成i和i',i表示用的餐巾,i'表示脏餐巾,连接: (s,i,r[i],p)表示在这一天买新餐巾 (i,t,r[i],0)表示这一天用了r[i]的餐巾 (s,i+n,r[i],0)表示这一天有r[i]条脏餐巾 if(i+ft include include inclu 阅读全文
posted @ 2018-02-04 22:31 lokiii 阅读(131) 评论(0) 推荐(0)
摘要:对于ai==0连接(i,t,1,0),对于ai 1(s,i,ai 1,0),然后对以相邻的两个点(i,j)连接(i,j,inf,1),注意这里是一个环的形式,所以1和n+1相连 阅读全文
posted @ 2018-02-04 20:50 lokiii 阅读(99) 评论(0) 推荐(0)
摘要:比较神奇的建图。首先把点离散化成n的级别有m个,设s=0,t=m+1,然后i从0到m连接(i,i+1,k,0),对于区间(ai,bi)连接(ai',bi',1, wi)。 这样建图显然增广路最多只有k条,因为同一条增广路上选择的区间是不会重叠的,不同增广路上选择的区间是一定有重叠的,所以保证了最多重 阅读全文
posted @ 2018-02-04 14:36 lokiii 阅读(114) 评论(0) 推荐(0)
摘要:如果\\( b[i]==0 \\)那么就是裸的费用流/KM,当然KM快一些~~但是为什么不写KM呢因为我不会打板子了~~ 考虑二分答案,那么问题变成了判定问题。 $$ ans=\frac {a_1+a_2+...+a_n}{b_1+b_2+...+b_n} $$ $$ (b_1+b_2+...+b_ 阅读全文
posted @ 2018-01-10 08:22 lokiii 阅读(94) 评论(0) 推荐(0)
摘要:果然还是不会建图… 设\\( i \\)到\\( j \\)有通路,代价为\\( w[i][j] \\),瞬移到i代价为\\( a[i] \\),瞬移到i代价为\\( a[j] \\),逗号前是流量。 因为每个点只能经过一次,所以流量限制为1,注意到从s开始很难保证出发点不同,所以但是又有联通条件, 阅读全文
posted @ 2018-01-03 20:29 lokiii 阅读(129) 评论(0) 推荐(0)
摘要:其实不用拆点,对于每个人我们假装他是\\( s[i]+1 \\)个点,可以由他向T点分别连\\( s[i]+1 \\)条边,容量为\\( t[i][j] t[i][j 1]\\),由S点向所有产品i连容量为c[i]的边,由所有产品向能制造它的人连容量为inf的边。 因为是最小费用最大流,\\( w[ 阅读全文
posted @ 2018-01-03 18:52 lokiii 阅读(100) 评论(0) 推荐(0)