正题 题目链接:https://loj.ac/p/3026 题目大意 给出\(n\)个点的一棵外向树,然后\(m\)个字符串和费用表示你每次可以花费这个费用覆盖路径字符串和给出字符串相等的路径,求覆盖所有边的最小花费(可以重复覆盖) 输出方案 \(1\leq n\leq 500,1\leq m\leq10^5,\sum |S|\leq 10^6\) 解题思路 注意到\(n\)很小,可以考虑枚举计算所有路径的最小花费,先构一个\(Trie\)即可处理这部分. 然后考虑怎么覆盖的问题,和[NOI20…
传送门 费用流经典题. 按照题目要求建边. 为了方便我将所有格子拆点,三种情况下容量分别为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…
LOJ#2351. 「JOI 2018 Final」毒蛇越狱 https://loj.ac/problem/2351 分析: 首先有\(2^{|?|}\)的暴力非常好做. 观察到\(min(|1|,|0|,|?|)\le 6\),我们只需要推出一个\(2^{|0|}\)和\(2^{|1|}\)的容斥式子 而这个式子也是很好推的. 考虑子集反演: \(f(S)=\sum\limits_{T\subseteq S}g(T)\) \(g(S)=\sum\limits_{T\subseteq S}(-1…
「BalkanOI 2018 Day1」Election 记C为1,T为-1,\(sum[i]\)为\(i\)点的前缀和. 对于询问\([l,r]\),分两步计算答案. 要求所有点的\(sum[i]-sum[l-1] \geq 0\),那么就把一些点拔高,需要删去的点数为\(max(sum[l-1]-sum[i])\),最终得到\(sum^{'}[i]\),记需要删去的点个数为\(ans_1\). 要求所有点\(sum^{'}[r]-sum^{'}[i] \geq 0\),那么就把一些点降低,需…
「BalkanOI 2018 Day1」Minmaxtree 每个点都有一个最大和最小权值的限制. 然后每一个权值的限制都必须要取到. 每个点显然可以直接让他取到最大或最小权值. 可以想到每个点匹配一个权值. 不就是一个二分图吗... 每个点连向最大和最小权值,然后跑dinic,输出方案,当然本题匈牙利可以跑过. 接下来就是要求每个点的权值限制:可以用LCT直接链标记,也可以离线下来,排序后,依次加入,用一个并查集跳过已经访问过的点. #include<bits/stdc++.h> #defi…
题目描述 译自 BalticOI 2011 Day1 T3「Switch the Lamp On」有一种正方形的电路元件,在它的两组相对顶点中,有一组会用导线连接起来,另一组则不会.有 N×M 个这样的元件,你想将其排列成 N 行 M 列放在电路板上.电路板的左上角连接电源,右下角连接灯泡.试求:至少要旋转多少个正方形元件才能让电源与灯泡连通,若无解则输出 NO SOLUTION. Casper is designing an electronic circuit on a N×M rectan…
传送门 网络流好题. 这道题可以动态建图. 不难想到把每个球iii都拆点成i1i_1i1​和i2i_2i2​,每次连边(s,i1),(i2,t)(s,i_1),(i_2,t)(s,i1​),(i2​,t),如果(u,v)(u,v)(u,v)可以匹配的话就连边(u1,v2)(u_1,v_2)(u1​,v2​),然后用最大流检验,如果能流动说明不用加柱子,否则需要新加一个柱子. 题目还要求输出方案. 那么我们在dfsdfsdfs的时候更新后继就可以了. 代码: #include<bits/stdc+…
LINK 很好的一道网络里题 首先想插头DP的还是出门左转10分代码吧 然后考虑怎么网络流 首先要保证没有漏水 也就是说每个接口一定要有对应的接口 那么发现每个点只有可能和上下左右四个点产生联通关系 所以不妨对图进行黑白染色 然后把源点连向所有的黑色格子,所有的黑色格子向白色格子连边,所有的白色格子向汇点连边 那么具体怎么处理每个格子的贡献? 把每个格子分成四个点分别表示上下左右 然后我们发现需要转动的只有三种 只有一个接口 有两个接口形成L形 有三个接口 然后考虑一个接口,相反方向连边代价是2…
LOJ#3032. 「JOISC 2019 Day1」馕 处理出每个人把馕切成N段,每一段快乐度相同,我们选择第一个排在最前的人分给他的第一段,然后再在未选取的的人中选一个第二个排在最前的切一下,并把第二段给他,这样下去一定有解 代码细节具体在比较大小的时候成绩可能需要int128 然后在给每个人分段的时候,把一个馕的长度当成\(Nq\),把要得到的每段长度当成\(sum\)(所有段快乐度的总和)就可以1去分了 #include <bits/stdc++.h> #define fi first…