摘要:
题面传送门 对于左部点建超级原,右部点建超级汇,边权为$1$跑$dicnic$即可,这样超级原控制了每个点只能走一次。 代码实现: #include<cstdio> #include<cstring> #include<queue> #define min(a,b) ((a)<(b)?(a):(b) 阅读全文
摘要:
题面传送门 直接上$dicnic$板子即可,注意加几个剪枝,跑得飞快。 代码实现: #include<cstdio> #include<cstring> #include<queue> #define min(a,b) ((a)<(b)?(a):(b)) using namespace std; i 阅读全文
摘要:
题面传送门 先两遍$dfs$跑出树的直径。 因为所有树的直径都是相类似的,所以只要跑一条直径就好了。 然后在这条直径上尺取。 最后对于直径上每个点的子树不经过直径上的边求距离取最大值即可,这一步很难想,因为如果不取最大值那么就会漏掉答案因为无论如何都是要有这条边的权值的。 完美$O(n)$ 代码实现 阅读全文