【题解】[USACO19DEC]Milk Visits G】的更多相关文章

题目戳我 \(\text{Solution:}\) 这题不要把思想局限到线段树上--这题大意就是求路径经过的值中\(x\)的出现性问题. 最开始的想法是值域线段树--看了题解发现直接\(vector\)加二分即可\(O(n\log^2 n)\)解决. 思路: 用\(vector\)存下颜色\(i\)所出现的所有节点,对每一个\(vector\)排序后,考虑跳链的过程中二分第一个大于链头\(dfs\)序的点并判断它是不是在当前查询区间的范围内.最终复杂度是跳链的\(log\)和二分的\(\log.…
发现是一道比较裸的树上莫队,于是就开始刚,然后发现好像是最难的一道题--(本题解用于作者加深算法理解,也欢迎各位的阅读) 题意 给你一棵树,树有点权,询问一条路径上是否有点权为 \(c\) 的点. 题解 我们可以比较明显地发现询问是很像莫队的询问处理的,可以 \(O(1)\) 去扩展 \(l\) 和 \(r\) .但是这题是树,所以我们需要引入欧拉序的概念. 欧拉序其实很像 \(dfs\) 序,但是会在出栈的时候多记录一次,我们可以利用欧拉序来将树上的路径转化为莫队需要的区间问题. 我们可以先画…
为什么以它为例,因为这个最水,LCA唯一黄题. 首先做两道并查集的练习(估计已经忘光了).简单来说并查集就是认爸爸找爸爸的算法.先根据线索理认爸爸,然后查询阶段如果发现他们的爸爸相同,那就是联通一家的,不同就不是一家的. 两道简单例题 P1551 亲戚       P1536  村村通 以P1551 亲戚为例 题目背景 若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系. 题目描述 规定:x和y是亲戚,y和z是亲戚,那么x和z…
题意:有一\(n\)个点,\(m\)条边的双向图,每条边都有花费和流量,求从\(1\)~\(n\)的路径中,求\(max\frac{min(f)}{\sum c}\). 题解:对于c,一定是单源最短路,我们可以用dijkstra,但是这个最小流量不是很好搞,但是题目所给的数据范围较小,所以我们可以直接枚举最小流量,然后每次初始化数组跑dijkstra,去找大于当前最小流量的边,如果\(1\)~\(n\)有路径能走,我们每次维护答案的最小值. 代码: struct misaka{ int out;…
题目描述 Farmer John 最近为了扩张他的牛奶产业帝国而收购了一个新的农场.这一新的农场通过一个管道网络与附近的小镇相连,FJ 想要找出其中最合适的一组管道,将其购买并用来将牛奶从农场输送到小镇. 这个管道网络可以用 $N$ 个接合点(管道的端点)来描述,将其编号为 $1-N$.接合点 $1$ 表示 FJ 的农场,接合点 $N$ 表示小镇.有 $M$ 条双向的管道,每条连接了两个接合点.使用第 $i$ 条管道需要 FJ 花费 $c_i$​ 美元购入,可以支持每秒 $f_i$​ 升牛奶的流…
Milk Pumping G&Milk Routing S 双倍经验时间 洛谷P5837 [USACO19DEC]Milk Pumping G 洛谷P3063 [USACO12DEC]Milk Routing S 题目模型 给定\(N\)个点和\(M\)条边,对于每条边,给定连接的两个端点以及这条边的花费和"流量" 设这条路径上所有边的花费总和为\(L\) 设这条路径上所有边中"流量"值最小的为\(C\) 要求找出一条\(1\)到\(N\)的路径满足:\(L…
这题其实想法挺简单的,因为他只需要简单的把每个点的花费和流量用dp记下来就好了 1.怎么记: 首先考虑dp的状态.由于所在的点和流量都要记,所以dp开二维,一维记所在的点,另一维记去哪 //dp[i][j] ==> i 是现在所在的点,j是流量 2.从哪开始 看题 3.转移方法 //dp[要去的点][现在的流量和要去的流量的最小值] = dp[现在的点][现在的流量]+去的花费 4.输出 在终点,对于每个能到达的流量,最大值就是花费/流量 dijkstra代码: #include <iostr…
 目录: K Airdrop I Soldier Game L Sub-cycle Graph G Repair the Artwork ———————————————————— ps:楼主脑残有点严重,很容易写错别字和语言组织混乱,如果在读文章时遇到,可以在评论区里回复一下,我好改(花式骗评论) 补题地址:http://acm.zju.edu.cn/onlinejudge/showProblems.do?contestId=1&pageNumber=31 顺便好人做到底,给大家凑个11/13的…
\(Link\) \(\text{Solution:}\) 这一题,我们要做到,食物和牛.牛和饮料均为一对一的关系.我们发现这个图不好建立. 经典技巧:将牛拆边,拆成入点和出点,并连容量为\(1\)的边. 然后,从源点向食物连边,从食物向牛的入点连边,入点向出点连边,出点向饮料连边,饮料向汇点连边.容量均为\(1.\) 建立完这个图模型后,直接跑最大流即可. 注意点的编号问题. #include<bits/stdc++.h> using namespace std; const int MAX…
\(Link\) \(\text{Solution:}\) 把奶牛的忍耐度转化为线段,则题目转化为选择一些点使得覆盖的线段尽可能多.一个点只能覆盖一条线段. 考虑将点按照位置排序,线段按照右端点排序.排序后显然线段的最低耐受程度是递增的,那么我们显然用位置最靠左的点最优,因为以后它一定覆盖不了其它的线段.依据这个贪心策略来决定决策. 也就是说,位置越靠右的点,可以覆盖的线段数是更可能多的,而排完序后的靠左的点在右移的过程中会不如靠右的点优.所以要尽可能用掉. #include<bits/stdc…