做这题之前最好学会 "树形 \(dp\) 求树的直径"这一前缀知识(虽然我会但是我还是没想出来) 几乎想到要求直径这道题也没什么问题了(这不是废话吗,为什么题面里给了"直径"二字我硬是没往直径那想) solution 首先不难发现,这是一道树上的 Monthly Expense S ,需要二分答案是显然的,并且还要利用它是一棵树的优势. 证明二分可行性最简单的办法就是看指针移动后候选集合是否存在包含关系,若存在,则必定有单调性. 然后我们现在的主要问题是如何 \(c…
Problem 1: Cow Calisthenics [Michael Cohen, 2010] Farmer John continues his never-ending quest to keep the cows fit by having them exercise on various cow paths that run through the pastures. These cow paths can be represented as a set of vertices co…
2021.11.03 P2886 [USACO07NOV]Cow Relays G(矩阵+floyed) [P2886 USACO07NOV]Cow Relays G - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 给出一张无向连通图,求S到E经过k条边的最短路. 分析: 对于floyed,在第k个点时,任意的i到j之间的最短路已经经过了(k-1)个点.当fa[i] [j]经过了x条边,fb[i] [j]经过了y条边,想要算出经过了x+y条边,只需要按照floyed的算…
[USACO07DEC]Best Cow Line G [USACO07DEC]Best Cow Line G 小声哔哔:字符串hash牛逼 题意 给出一个字符串,每次可以从字符串的首尾取出一个字符,放到队列的尾部,求可以得到的最小的字典序是多少? 思路1 此时字符串首尾的下标分别为l,r. 如果str[l]!=str[r]:取较小的字符串 如果str[l]==str[r]:找到第一个非负整数x,使得str[l+x]!=str[r-x]. ​ 如果str[l+x]<str[r-x],那么此时取s…
题目描述 Farmer John continues his never-ending quest to keep the cows fit by having them exercise on various cow paths that run through the pastures. These cow paths can be represented as a set of vertices connected with bidirectional edges so that each…
题目 For their physical fitness program, \(N (2 ≤ N ≤ 1,000,000)\) cows have decided to run a relay race using the \(T (2 ≤ T ≤ 100)\) cow trails throughout the pasture. Each trail connects two different intersections \((1 ≤ I1_i ≤ 1,000; 1 ≤ I2_i ≤ 1,…
震惊,蒟蒻学树剖第二天就打题解 所以说,理解之后树剖这种东西其实难度真心不大.至少这种模板题都可以秒切的 这里推荐一个博客: 树剖详解 蒟蒻就是在这个博客上学到的 如果想看我自己写的总结,请点 我的博客 这个链接(虽然这个是写给自己看的,理解难度应该不小) 树剖的方法在博客上都有了,在这里不细讲,专注讲一下这题的实现: \(dfs\) 请使用博客上的方法,这题需要做的只是照搬 首先,我们可以发现,这题跟普通的树剖基本上一样.唯一的区别就是他要使用 \(xor\) .那么,我们发现, \(xor\…
看到各位大佬们已经把其他的东西讲的很明白了,我这个 juruo 就讲一讲最基本的树链剖分吧. 0.树剖是什么?能吃吗? 不能吃 树剖是树链剖分的简称,我们一般说的树剖其实指重链剖分.当然,还有一种长链剖分我不会,但是据说不常用. 树链剖分能够把树剖分成许多链,这样就可以用维护区间的方式维护一棵树. 1.怎么剖分 先引入一些概念: 重儿子:一棵树最大的子树叫重儿子.例如这棵树中3就是1的重儿子:很明显,一棵树的重儿子是唯一的.什么?有多棵子树的大小相同?那就随便选一个呗. 轻儿子:除了重儿子都是轻…
题目链接 二分答案,判断需要断几条边,用\(f[i]\)表示以\(i\)为根的子树断边后的最长路径,对于一个点\(u\),存在\(f[v]>mid\)时就删到\(v\)的边\(f[v1]+f[v2]>mid\)时就删\(f\)较大的边,可以sort之后搞一搞 #include<algorithm> #include<iostream> #include<cstring> #include<cstdio> #include<vector>…
新的奇巧淫技 原题传送门 众所周知,模拟退火是一种很强大的算法,DP很强,但我模拟退火也不虚,很多题你如果不会的话基本可以拿来水很多分.比如这道题,我用模拟退火可以轻松水过(虽然我是足足交了两页才过)但是没有什么大问题,如果模拟退火还不会,建议先看你谷日报学习一下.剩下的主要就是一些细节,看代码. #include <bits/stdc++.h> using namespace std; #define gc getchar() #define re register double st=cl…