题意: n 个排成一列的哨站要进行通信.第 i 个哨站的频段为 ai. 每个哨站 ii 需要选择以下二者之一: 1.直接连接到控制中心,代价为 W:2.连接到前面的某个哨站 j(j<i),代价为 |ai−aj|. 每个哨站只能被后面的至多一个哨站连接. 请你求出最小可能的代价和. 题解: 显然的费用流 然后我耿直的n^2建边,觉得我的费用流很快,应该可以过 然后返回了TLE 然后google了一下题解:发现这题卡了n^2建图,需要优化建边 我这里是通过分治优化的 就是类似与建立一个虚点 一个x要…
根据题意 每个点可以直接与S,T相连 也可以和前面的哨站相连 暴力建边的话 有n2条边 要用分治优化建边: 类似于归并排序 先对每一层分为左半边与右半边 对每一半都拿出来先排序去重后 直接排成一条链建边 if (l == r) { return ; } ; solve(l, mid), solve(mid + , r); ; for (int i = l; i <= r; i++) { aa[++cnt] = a[i]; } sort(aa + , aa + + cnt); cnt = uniq…
LOJ#3097. 「SNOI2019」通信 费用流,有点玄妙 显然按照最小路径覆盖那题的建图思路,把一个点拆成两种点,一种是从这个点出去,标成\(x_{i}\),一种是输入到这个点,使得两条路径合成一条(或者是新建一条),标成\(y_i\) 源点向每个\(x_i\)流一条容量为1,费用为0的边 然后向每个\(y_{i}\)流一条容量为1,费用为W的边 每个\(y_i\)向汇点连一条容量为1,费用为0的边 这个时候,如果你充满梦想,你可以把所有的\(x_{i}\)到\(y_j\)(\(i < j…
题目 还好我没生在陕西啊 首先发现这个题不能\(dp\),数据范围不大,好像一种网络流的样子啊 哎等等,这样向后面连边不是一个\(DAG\)吗,这不是最小权路径覆盖的板子吗 于是我们套路的拆点,对于一个点\(i\)我们拆成\(i\)和\(i'\),源点向点\(i\)连费用为\(0\)容量为\(1\)的边,\(i'\)向汇点连费用为\(0\)容量为\(1\)的边 之后我们把让\(S\)向\(i'\)直接连费用为\(W\)容量为\(1\)的边,表示直接连到控制中心 对于点\(i\),我们向\(j'(…
题意: 给一个网络中某些边增加容量,增加的总和最大为K,使得最大流最大. 费用流:在某条边增加单位流量的费用. 那么就可以2个点之间建2条边,第一条给定边(u,v,x,0)这条边费用为0 同时另一条边(u,v,K,1)费用为1,那么就可以通过限制在增广时相应的费用即可找出最大流 个人觉得这样做的原因是每次增光都是最优的.所以通过限制最终费用不超过K可以得到最优解 #include <map> #include <set> #include <list> #include…
Description: N个订单(每个订单订K种商品),M个供应商(每个供应商供应K种商品),K种商品,后N行,表示每一个订单的详细信息,后M行表示每个供应商供应的详细信息,后K 个N * M的矩阵表示第m个供应商送第k种商品到第n个订单的花费 Solution: 建图,分商品来建,对于第k种商品: · 源点连N个订单对于该商品的需求,费用0,容量为需求量 ·N个订单对应连M个供应商,费用为第k个矩阵中对于的费用,容量为inf ·M个供应商链接汇点,费用0,容量为供应量 Code: 小错误还是…
题意: 有\(n\)个数\(a_1\cdots a_n\),现要你给出\(k\)个不相交的非降子序列,使得和最大. 思路: 费用流建图,每个点拆点,费用为\(-a[i]\),然后和源点连边,和后面非降的数连边,源点和超级源点连一条容量\(k\)的边,跑费用流. 用\(spfa\)费用流\(TLE\),这里因为不会出现负环,所以用\(Dijkstra\)优化. 代码: /******* dijkstra优化费用流模板 *******/ //不能有负环 #include<functional> /…
题意:       给以一个无向图,0 - n,警察在0,他们有k个警队,要派一些警队去1--n个城市抓小偷, 问所有吧所有小偷全抓到然后在返回0的最小路径和是多少,当地i个城市被攻击的时候他会通知i-1城市,也就是说要么同时消灭他俩,要么消灭i-1在消灭i; 思路:       经典的费用流建图 ,先来一遍floyd处理下图 ,首先虚拟出来源点s ,终点t ,超级源点ss, 建图:        from       to         cost           flow        …
LOJ#3098. 「SNOI2019」纸牌 显然选三个以上的连续牌可以把他们拆分成三个三张相等的 于是可以压\((j,k)\)为有\(j\)个连续两个的,有\(k\)个连续一个的 如果当前有\(i\)张牌,且\(i >= j + k\) 那么可以\((j,k)\rightarrow (k,(i - j - k) \% 3)\) 可以用矩阵乘法优化,每遇到一个有下限的牌面的就再特殊造一个矩阵转移 #include <bits/stdc++.h> #define fi first #def…
Loj #3096. 「SNOI2019」数论 题目描述 给出正整数 \(P, Q, T\),大小为 \(n\) 的整数集 \(A\) 和大小为 \(m\) 的整数集 \(B\),请你求出: \[ \sum_{i=0}^{T-1} [(i\in A\pmod P)\land(i\in B\pmod Q)] \] 换言之,就是问有多少个小于 \(T\) 的非负整数 \(x\) 满足:\(x\) 除以 \(P\) 的余数属于 \(A\) 且 \(x\) 除以 \(Q\) 的余数属于 \(B\). 输…