随笔分类 -  C-图论=====================

摘要:Link: 传送门 代码量很少的一套思维题 A: 试一试发现最后状态一定是所有$min,max$间$gcd$的倍数 直接判断数量的奇偶性即可 #include <bits/stdc++.h> using namespace std; #define X first #define Y second 阅读全文
posted @ 2018-10-11 17:35 NewErA 阅读(226) 评论(0) 推荐(0)
摘要:Link: 传送门 可能要补一补之前的题了 题目名字天(Sky)的(De)炭(C)好评啊…… A: 从买/卖物品的配对来考虑: 可以发现如果当前物品为卖,肯定从之前选最小的(无论其为买/卖),因为贡献都是差值! 如果要买的物品当前状态为卖,那么相当于将那条匹配链的卖的那一端转换 用优先队列维护$pa 阅读全文
posted @ 2018-09-18 10:55 NewErA 阅读(240) 评论(2) 推荐(0)
摘要:Link: 传送门 A: 分层图最短路(其实就是最短路转移时多记录一维的数据 #include <bits/stdc++.h> using namespace std; #define X first #define Y second typedef double db; typedef long 阅读全文
posted @ 2018-09-13 09:28 NewErA 阅读(253) 评论(0) 推荐(0)
摘要:Link: 传送门 A: 贪心从小到大插入,用并查集维护连通性 #include <bits/stdc++.h> using namespace std; #define X first #define Y second typedef double db; typedef long long ll 阅读全文
posted @ 2018-09-09 22:25 NewErA 阅读(221) 评论(0) 推荐(0)
摘要:Link: 传送门 A: 对于每一条分割线,设本不应在其左侧的个数为$x$ 重点要发现每次一来一回的操作恰好会将一对分别应在左/右侧的一个数从右/左移过去 这样就转直接用树状数组求出最大的$x$即可 #include <bits/stdc++.h> using namespace std; #def 阅读全文
posted @ 2018-09-09 20:40 NewErA 阅读(247) 评论(0) 推荐(0)
摘要:Link: BZOJ 1070 传送门 Solution: 关键难处在于后加入的车的等待时间受到前面加入车的影响 但将式子同类项合并后发现:$W=n*a_1+(n-1)*a_2...+a_n$ 这样就可以将原来的一个人拆成$n$个人,分别表示处理倒数第$i$个车的决策,代价为$i*w$ 这样每个车就 阅读全文
posted @ 2018-09-04 14:12 NewErA 阅读(207) 评论(0) 推荐(0)
摘要:Link: BZOJ 2668 传送门 Solution: 重点在于对于每条转移路径:首尾算一次,中间节点算两次 可以一点拆三点,将原流量拆成入流量和出流量 但其实也可以就拆两点,分前后是否是一首尾点一普通点来确定是否有一条路径只占用1流量 Code: 阅读全文
posted @ 2018-09-04 13:53 NewErA 阅读(215) 评论(0) 推荐(0)
摘要:Link: P2765 传送门 Solution: 首先将模型转化为:依次放数1到$k$,如果数$v$能放在$u$后,则连边$(u,v)$ 求在最少路径覆盖数不大于$n$时的最大的$k$ 显而易见的一点是$k$明显是和$n$正相关的 这样我们就可以 二分/枚举 $k$的值来进行求解,每次判断是否符合 阅读全文
posted @ 2018-08-28 09:51 NewErA 阅读(125) 评论(0) 推荐(0)
摘要:Link: P2763 传送门 Solution: 吐槽一下数据,说好都是正整数结果发现有0? 此类有容量限制的匹配问题首先要想网络流 建图:$<S,k,x><k,n,1><n,T,1>$ 判断能否满流就相当于判断了可行性,输出方案时找$k$当前流量为0的边即可 此题由于要求的类型数可能为0,因此输 阅读全文
posted @ 2018-08-27 21:10 NewErA 阅读(139) 评论(0) 推荐(0)
摘要:Link: P2764 传送门 Solution: 基本模型 首先结论为:将每个点$v$拆成$v,v'$,有向边$edge(u,v)$改为$edge(u,v')$,建成二分图 那么$最小路径覆盖数=n-二分图最大匹配数$ 证明:匹配$(u,v')$相当于连接了$(u,v)$,连通块个数减一,想要连通 阅读全文
posted @ 2018-08-27 20:43 NewErA 阅读(165) 评论(0) 推荐(0)
摘要:Link: P2774 传送门 Solution: 方格取数和最大且要求两两没有公共边 遇到方格内的不相邻问题,考虑黑白染色来对点分类 问题转化为使黑点不和白点相邻的最小代价,其中每个点的代价只计算一次 明显的集合划分模型,用最小割解决: $<S,black,w>,<white,T,w>,<blak 阅读全文
posted @ 2018-08-23 13:42 NewErA 阅读(271) 评论(0) 推荐(0)
摘要:Link: BZOJ 3140 传送门 Solution: 挺好的一道暴力题 首先发现可以每次贪心选择宽度为1的一面,即$1*x*y,1*x*z,1*y*z$ 那么对于与该面垂直的面,相当于解决了一行/一列 于是我们可以先考虑一个二维问题: 每次选取一行/一列要耗费一个代价,询问要覆盖所有染色点需要 阅读全文
posted @ 2018-07-22 22:30 NewErA 阅读(164) 评论(0) 推荐(0)
摘要:Link: BZOJ 1562 传送门 Solution: 一道比较考对$Hungry$算法理解的题目 首先可以轻松看出原序列和答案序列的对应关系,从而建出二分图匹配模型 下面的关键在于如何保证字典序最小 第一种方式是暴力逐位确定: 对于$1....n$每一位都先贪心选取字典序小的节点,判断将该边除 阅读全文
posted @ 2018-07-21 22:33 NewErA 阅读(153) 评论(0) 推荐(0)
摘要:Link: P2526 传送门 Solution: 一道提示非常到位的题目 题面中强调了在两个路径相邻点间只能再去至多一个点,且每个点只计算一次贡献 于是明显可以将原题看作询问在两个不相交点集间最多能连几条边 接下来将合法边连上跑二分图匹配就好了 Tip:二分图匹配时分清$X,Y$集合以及$matc 阅读全文
posted @ 2018-07-21 22:09 NewErA 阅读(243) 评论(0) 推荐(0)
摘要:Link: BZOJ 1059 传送门 Solution: 可以发现其实只要保证每行每列刚好只有一个就能确保构造出解 于是建立列集合与行集合的对应直接跑二分图匹配即可 Code: 阅读全文
posted @ 2018-07-21 21:56 NewErA 阅读(150) 评论(0) 推荐(0)
摘要:Link: P1640 传送门 Solution: 可以发现这道题其实是属性值集合和装备集合的对应,且每个点只能用一次 那么就能想到二分图最大匹配,一旦不可行直接退出就行了 Tip: 1、$Hungry$算法连有向边就行了…… 2、注意左右两个集合范围不同! Code: 阅读全文
posted @ 2018-07-21 21:52 NewErA 阅读(141) 评论(0) 推荐(0)
摘要:Link: ARC061 传送门 C: 暴力$dfs$就好了 #include <bits/stdc++.h> using namespace std; typedef long long ll; ll n,res=0; int dgt[15],cnt; void dfs(int dep,ll su 阅读全文
posted @ 2018-07-19 09:17 NewErA 阅读(166) 评论(0) 推荐(0)
摘要:Link: BZOJ 2427 传送门 Solution: 只看样例的话会以为是裸的树形$dp$…… 但实际上题目并没有说明恰好仅有一个物品没有依赖项 因此原图可能由是由多棵树与多个图组成的 先跑一遍$tarjan$求出每个图中的$SCC$,缩点将原图转化为森林 再设置一个根,将森林转换成一棵树$d 阅读全文
posted @ 2018-07-15 09:49 NewErA 阅读(191) 评论(0) 推荐(0)
摘要:Link: ARC064 传送门 C: 贪心+对边界的特殊处理 #include <bits/stdc++.h> using namespace std; typedef long long ll; const int MAXN=1e5+10; ll res=0; int n,x,dat[MAXN] 阅读全文
posted @ 2018-07-12 09:12 NewErA 阅读(154) 评论(0) 推荐(0)
摘要:Link: SHPC2018 传送门 C: 一道看上去有些吓人的题目,不过$1e9$规模下的$n^m$代表肯定是可以约分的 可以发现能提供贡献的数对只有$2*(n-d)$种,那么总贡献为$2*(n-d)*(m-1)*n^{m-2}$ 除去$n^m$后就是$\frac{2*(n-d)*(m-1)}{n 阅读全文
posted @ 2018-07-08 21:02 NewErA 阅读(187) 评论(0) 推荐(0)