题目大意
给定一棵树,边有边权。需要在树上选一条长度不超过 s 的路径(核心路径),使得树上所有点到这条路径的距离的最大值最小。
https://www.luogu.com.cn/record/178248030 50pts TLE
1 |
|
给定一棵树,边有边权。需要在树上选一条长度不超过 s 的路径(核心路径),使得树上所有点到这条路径的距离的最大值最小。
https://www.luogu.com.cn/record/178248030 50pts TLE
1 | #include <iostream> |
反向建边,然后注意bfs的逻辑一定要清楚,要以什么为当前点,什么为父节点,不要混淆。
1 | #include <iostream> |
这个代码稍微有点搞笑,样例都没过
https://atcoder.jp/contests/abc373/submissions/58559275
1 | #include <iostream> |
我仔细想了一下这个问题,发现如果不知道次序就很难解,于是我仔细开始想拓扑排序的可能性。
想不到确实不是。
这句第一个条件其实是没有重复路,二条件是规定有向图,没提到过无环

而且就算知道次序也会坐牢

可以走反边5→2→1→3→6(其中 2→1 以及 3→6 是反边)
相比于最后一次TLE背包提交,加了以下这些
1 | for(int j=1;j<=x-sumYen;j++) { // 背包容量为钱,背包价值为生产力 |
1 | if(sumYen>x) |
主要思路是二分答案加背包dp
背包容量为钱,背包价值为能加工多少产品
通过背包dp让加工产品最大化
1 | // https://atcoder.jp/contests/abc374/tasks/abc374_e |
这个程序实际上没啥太大问题,但是即便开long long minYen还是超范围溢出了。
这个题目再次证明了,二分的题目r不能设太大,一个是复杂度,还有一个是溢出。
1 | // https://atcoder.jp/contests/abc374/tasks/abc374_e |
原来两台机子都能用!那check()函数写起来是比较麻烦
1 | Both machines S_i and T_i can be used for process i. |
AC 64 个点 https://atcoder.jp/contests/abc374/submissions/58537475
加上了对于组合的判定
1 | // https://atcoder.jp/contests/abc374/tasks/abc374_e |
我怀疑是我的向上取整模版的问题
1 | #include <iostream> |
1 | 0 |
毫无疑问,0/782=0,你就算加ceil()也应该是0,但显然我们的模版出了问题。
哎,用系统ceil()提交了一遍,发现又WA了,和前面一模一样,只能说就这样吧,累了。
https://atcoder.jp/contests/abc374/submissions/58539387
1 | // https://atcoder.jp/contests/abc374/tasks/abc374_e |
引入了性价比概念,但发现连样例都过不了😂,还是要用dp。
1 | // https://atcoder.jp/contests/abc374/tasks/abc374_e |
将中间的判定改为了背包dp,果然这种通用做法就是应用性广泛且经过证明
// 就TLE了3个点 https://atcoder.jp/contests/abc374/submissions/58545771
1 | // https://atcoder.jp/contests/abc374/tasks/abc374_e |
当年用python写的代码
193.18pts TLE 3/22 WA 2/22
https://ac.nowcoder.com/acm/contest/view-submission?submissionId=70565258
1 | from collections import deque |
60pts TLE 可能是check函数复杂度太高了
1 | #include <iostream> |
可以二分里套二分,当然那个二分我们就不写了,直接上stl
不过我仔细分析了一下时间复杂度,以及这个样例(另一道题目https://www.luogu.com.cn/problem/P2884)
1 | 7 5 |
1 | 500 |
会使上面这个程序死循环,让我确信不是check()的问题
仔细分析过后,发现还是check()的问题,check死循环了。
1 | while (s<=n) { |
解决起来倒也简单
ll l=maxa,r=maxans;
让左端点比数组中最大的元素大,就可以了,这样可以保证cnt的前进。
1 | // https://www.luogu.com.cn/problem/P2884 |