luogu P5331 [SNOI2019]通信】的更多相关文章

传送门 有匹配次数限制,求最小代价,这显然是个费用流的模型.每个点暴力和前面的点连匹配边,边数是\(n^2\)的. 然后发现可以转化成一个set,每次加入一个点,然后入点对set里面的出点连边.这个set可以用主席树实现,然后就主席树优化连边,点数边数都是\(nlogn\)的,然后就能过了 注意这里连边要把一个点入点拆成两个\(a_i,-a_i\),出点同理,然后假设\(a_i\)在set的第\(p\)位,\(a_i\)在负权值主席树上连区间\([1,p-1]\),\(-a_i\)在正权值主席树…
这题真让人自闭-我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…
[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\)个哨站的频段为\(a_i\). 现在每个哨站可以选择: 直接连接到中心,代价为\(w\): 连接到前面某个哨站\(j(j<i)\),代价为\(|a_i-a_j|\). 规定每个哨站只能被后面的至多一个哨站连接. 问最终最小代价和为多少. 思路: 直接费用流比较好想:每个点有两个选择,我们将点拆为两个点\(x_i,y_i\),然后 \(S->x_i\)容量为\(1\),费用为\(w\): \(S->y_i\)容量为\(1\),费用为\(0…
考虑用费用流解决本题. 每个哨站看作一个点,并将其拆为两个点,建图方式为: \(S \longrightarrow x_i\) 容量为\(1\),费用为\(0\) \(x_i \longrightarrow T\) 容量为\(1\),费用为\(w\) \(x_i \longrightarrow x^\prime_j\ (i>j)\) 容量为\(1\),费用为\(|a_i-a_j|\) \(x^\prime_i \longrightarrow T\) 容量为\(1\),费用为\(0\) 这样就可以…
瞎扯 我们网络流模拟赛(其实是数据结构模拟赛)的T2. 考场上写主席树写自闭了,直接交了\(80pts\)的暴力,考完出来突然发现: woc这个题一个cdq几行就搞定了! 题意简述 有\(n\)个哨站,第\(i\)个哨站的频段为\(a_i\).每个哨站可以花费\(W\)连接中心,也可以花费\(|a_j-a_i|\)连接到第\(j\)个哨站(\(j<i\)). 每个哨站最多只能被连接一次,求所有哨站连接的最小花费. 做法 Luogu能过的暴力 由最多只能被连接一次想到流量限制(显然),发现题目要求…
题目链接 费用流,当建边需要依靠位置和权值两个偏序关系时,可以用cdq分治优化建边. 代码: #include<bits/stdc++.h> using namespace std; #define N 20007 #define M 200007 const int inf=0x3f3f3f3f; #define ll long long struct flow { int hd[N],pre[M],to[M],num,w[M],mf[N],fa[N],maf,s,t; ll f[M],di…
传送门 打麻将+1(雾 有顺子这种东西...注意到以某个位置为开头的顺子数量最多为2,那么有个想法就是枚举以每个位置为开头的顺子个数,然后每个位置的刻子的取法个数为\(\lceil\frac{\text{剩下的牌数}}{3}\rceil\),乘起来,然后每种情况的和就是答案 所以设\(f_{i,j,k}\)表示放到\(i\)牌,有\(j\)个\(i-1,i,i+1\)以及\(k\)个\(i,i+1,i+2\)的方案.转移枚举下一位放多少顺子(注意最后两个位置只能放0个),然后乘上刻子的取法个数进…
题目 如果\(P>Q\)的话我们先交换一下\(P,Q\). 我们先枚举所有满足第一个条件的数,对于\(x\equiv a_i(mod\ P)\),设\(x=a_i+kP(k\in[0,\lfloor\frac{T-a_i}P\rfloor])\). 然后能够产生贡献的数就是\(x\%Q\in B\)的数. 而且我们知道,当\(Q|kP\)时\(x\%Q\)就会产生循环,也就是说对\(k\)而言,\(M=\frac Q{(P,Q)}\)是循环节. 所以我们可以将计算\(k\in[0,\lfloor…