瞎扯 我们网络流模拟赛(其实是数据结构模拟赛)的T2. 考场上写主席树写自闭了,直接交了\(80pts\)的暴力,考完出来突然发现: woc这个题一个cdq几行就搞定了! 题意简述 有\(n\)个哨站,第\(i\)个哨站的频段为\(a_i\).每个哨站可以花费\(W\)连接中心,也可以花费\(|a_j-a_i|\)连接到第\(j\)个哨站(\(j<i\)). 每个哨站最多只能被连接一次,求所有哨站连接的最小花费. 做法 Luogu能过的暴力 由最多只能被连接一次想到流量限制(显然),发现题目要求…
题目传送门 传送门 题目大意 (经典题还不知道题意?) 容易想到需要把未使用的餐巾和已经使用的餐巾分开. 设$X_i$表示第$i$天已经的使用餐巾的点,设$Y_i$表示第$i$天还未使用的餐巾的点 我们知道使用过的餐巾数量 = 洗出来的餐巾数量 + 购买的餐巾数量(一个餐巾被多次洗出来算多次). 右边是啥,我们不清楚,但是我们清楚每一天新增的使用过的餐巾的数量,所以源点向$X_i$连一条容量为$r_i$,费用为0的边. 接下来还有几种连边: $X_i$向$X_{i + 1}$连一条容量为$\in…
[LOJ#3097][SNOI2019]通信(费用流) 题面 LOJ 题解 暴力就直接连\(O(n^2)\)条边. 然后分治/主席树优化连边就行了. 抄zsy代码,zsy代码是真的短 #include<iostream> #include<cstdio> #include<algorithm> using namespace std; #define ll long long #define MAX 50000 const int inf=1e9; inline int…
题意: n 个排成一列的哨站要进行通信.第 i 个哨站的频段为 ai. 每个哨站 ii 需要选择以下二者之一: 1.直接连接到控制中心,代价为 W:2.连接到前面的某个哨站 j(j<i),代价为 |ai−aj|. 每个哨站只能被后面的至多一个哨站连接. 请你求出最小可能的代价和. 题解: 显然的费用流 然后我耿直的n^2建边,觉得我的费用流很快,应该可以过 然后返回了TLE 然后google了一下题解:发现这题卡了n^2建图,需要优化建边 我这里是通过分治优化的 就是类似与建立一个虚点 一个x要…
这题真让人自闭-我EK费用流已经死了?- (去掉define int long long就过了) 我建的边害死我的 spfa 还是spfa已经死了? 按费用流的套路来 首先呢 把点 \(i\) 拆成两个点 \(i\) 和 \(i'\) 令 \(i'\) = \(i+n\) 对任意的 \(i\) 点 建 \(s -> i' -> t\) 表示这个连到控制中心- \(s -> i -> j ->t\) 表示连到某个哨站-流量为\(1\) 费用为 |\(a_i -a_j\)| 其中…
题面传送门 首先熟悉网络流的同学应该能一眼看出此题的建模方法: 将每个点拆成两个点 \(in_i,out_i\),连一条 \(S\to in_i\),容量为 \(1\) 费用为 \(0\) 的边 连一条 \(in_i\to T\) 容量为 \(1\) 费用为 \(W\) 的边,表示哨站 \(i\) 连向控制中心 连一条 \(out_i\to T\) 容量为 \(1\) 费用为 \(0\) 的边,表示每个哨站最多被后面一个哨站连接 对每对 \(i,j(i>j)\) 连一条 \(in_i\to ou…
题目:https://loj.ac/problem/2979 原来的思路: 优化连边.一看就是同一个桌子相邻座位之间连边.相邻桌子对应座位之间连边. 每个座位向它所属的桌子连边.然后每个人建一个点,向若干桌子连边. 因为连边的桌子是区间,所以线段树优化. 又想到志愿者招募之类的,所以想弄一个上下界费用流.人向它的座位连下界为1的边,对应桌子区间向人连边.找一些循环流. #include<cstdio> #include<cstring> #include<algorithm&…
题意 题目链接 分析 考虑每个棋子对对应的横向纵向的极大区间的影响:记之前这个区间中的点数为 \(x\) ,那么此次多配对的数量即 \(x\) . 考虑费用流,\(S\rightarrow 横向区间 \rightarrow 棋盘上的点 \rightarrow 纵向区间 \rightarrow T\) ,其中 $S\rightarrow 横向区间 $ 和 \(纵向区间 \rightarrow T\) 的费用差分设置. 如何寻找答案?如果采用 \(spfa\) 的增广方式的话,每次增广到终点的每条流…
传送门 费用流经典题. 按照题目要求建边. 为了方便我将所有格子拆点,三种情况下容量分别为111,infinfinf,infinfinf,费用都为validi,jval_{id_{i,j}}validi,j​​. 然后从源点向第一排的mmm个点连边,三种情况下容量都为111,费用都为0. 然后从最后一排的m+n−1m+n-1m+n−1个点向汇点连边,三种情况下容量为111,infinfinf,infinfinf,费用都为0. 至于格子之间的路径,三种情况下容量为111,111,infinfinf…
传送门 费用流sb题. 直接从sss向每个点连边,容量为现有物品量. 然后从ttt向每个点连边,容量为最后库存量. 由于两个点之间可以互相任意运送物品,因此相邻的直接连infinfinf的边就行了. 代码: #include<bits/stdc++.h> #define N 205 #define M 50005 using namespace std; inline int read(){ int ans=0; char ch=getchar(); while(!isdigit(ch))ch…