首页 > 其他分享 >[USACO10DEC] Cow Calisthenics G

[USACO10DEC] Cow Calisthenics G

时间:2023-08-25 22:58:44浏览次数:40  
标签:Calisthenics cnt Cow int mid USACO10DEC ans mx

  1. 注意到“最大值最小”,考虑二分最大直径。

  2. 对于当前直径,树形dp + 贪心的封锁。

  3. f[u]:以 u 为根的子树,叶节点到 u 的最大距离 +1。

  4. 在树形dp时维护 mx,与 f[u] 组成直径。

  5. 复杂度 \(\mathcal{O}(n\log n)\)。

View Code
#include <bits/stdc++.h>
 
using namespace std;
 
const int N = 1e5 + 5;
int n, s, head[N], idx, f[N], cnt, ans;
struct Edge{int v, nxt;} e[N << 1];
 
inline void add(int u, int v)
{
    e[++idx] = {v, head[u]};
    head[u] = idx;
}
 
inline void dfs(int u, int fa, int res)
{
    int mx = 0;
    for(int i = head[u];~i;i = e[i].nxt)
    {
        int v = e[i].v;
        if(v == fa) continue;
        dfs(v, u, res);
        if(f[v] + mx > res)
        {
            ++cnt;
            mx = min(mx, f[v]);
        }
        else mx = max(mx, f[v]);
    }
    f[u] = mx + 1;
}
 
inline bool check(int mid)
{
    cnt = 0;
    dfs(1, -1, mid);
    return cnt <= s;
}
 
int main()
{
    memset(head, -1, sizeof(head));
    scanf("%d%d", &n, &s);
    for(int i = 1, u, v;i < n;++i)
    {
        scanf("%d%d", &u, &v);
        add(u, v), add(v, u);
    }
    int l = 0, r = n - 1;
    while(l <= r)
    {
        int mid = l + r >> 1;
        if(check(mid))
        {
            r = mid - 1;
            ans = mid;
        }
        else l = mid + 1;
    }
    printf("%d\n", ans);
    return 0;
}

标签:Calisthenics,cnt,Cow,int,mid,USACO10DEC,ans,mx
From: https://www.cnblogs.com/Lien7x/p/P3000.html

相关文章

  • 「USACO11NOV」 Cow Lineup S
    「USACO11NOv1」CowLineupS题解问题描述农民约翰雇一个专业摄影师给他的部分牛拍照。由于约翰的牛有好多品种,他喜欢他的照片包含每个品种的至少一头牛。约翰的牛都站在一条沿线的不同地方,每一头牛由一个整数位置\(X_i\)以及整数品种编号\(ID_i\)表示。约翰想拍一张照片,这......
  • 北大ACM poj2141 Message Decowding
    MessageDecowdingTimeLimit:1000MS MemoryLimit:65536KTotalSubmissions:10326 Accepted:5672DescriptionThecowsarethrilledbecausethey'vejustlearnedaboutencryptingmessages.Theythinktheywillbeabletousesecretmessagestoplot......
  • P1345 [USACO5.4] 奶牛的电信Telecowmunication 题解
    P1345[USACO5.4]奶牛的电信Telecowmunication题目描述农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流。这些机器用如下的方式发送电邮:如果存在一个由\(c\)台电脑组成的序列\(a_1,a_2,\cdots,a_c\),且\(a_1\)与\(a_2\)相连,\(a_2\)与......
  • 题解 Cow and Snacks
    被黄题创死了2333题目链接首先肯定有一个贪心的想法:尽量使得人们拿的花重复,即尽量使得每个人都拿一束花。当然第一个人必须拿两束。接着思考:如何找出有几个人是必须拿两束花的。其实很简单,当\(A,B\)两人不能通过其他人使得他们的花有联系,比如\(A\)喜欢\(1,2\),\(B\)喜欢......
  • UVA10678 The Grazing Cow 题解
    题目链接思路一道简单模拟题。经过模拟,我们不难发现,牛的活动轨迹是一个椭圆。根据椭圆形面积公式得到\(S=\piab\)。其中,牛可以到的最左边或最右边时\(a=\frac{l}{2}\),距离中心最远时\(b=\frac{\sqrt{l^2-d^2}}{2}\)。注意有多组测试点,每次都应输出结果并换行。......
  • P4183 [USACO18JAN] Cow at Large P 题解
    题意分析我们首先想到,枚举贝茜在\(x\)点,枚举度数大于\(2\)的点为\(y\)。设\(x\)的度数为\(a\),\(y\)的度数为\(b\)。我们首先发现每个\(x\)点都有一个初始的贡献为\(a\)条通往叶子的路径。如果点\(y\)到最近的叶子节点的距离大于到\(x\)的点的距离(农夫不能在......
  • Great Cow Gathering G
    GreatCowGatheringG思路换根dp,TreeDistancesI强化版,同样的先思考单个的,那么对于子树\(u\)对于每一个儿子\(v\)都有:\(f_u=f_v+sum_v*w_{u,v}\)其中\(sum\)是子树大小,而\(w\)则是边的长度,用这种方式可以求出以1为根的答案,然后考虑换根公式,首先要转移到的节点......
  • P6066 Watchcow S
    \(P6066\)\(Watchcow\)\(S\)一、题目描述\(Farmer\)\(John\)有\(N\)个农场(\(2≤N≤10^4\)),这些农场由\(M\)条道路连接(\(1\leqM\leq5\times10^4\))。不保证没有重边。\(Bassie\)从\(1\)号农场开始巡逻,每条路必须从两个方向各走恰好一遍,最后回到\(1\)号农场。请输出一......
  • 需求太多处理不过来?MoSCoW模型帮你
    一、MoSCoW模型是什么MoSCoW模型是在项目管理、软件开发中使用的一种排序优先级的方法,以便开发人员、产品经理、客户对每个需求交付的重要性达成共识。MoSCoW是一个首字母缩略词,代表:M(Musthave):必须有。这些是产品成功的关键任务功能,通常是MVP(最小可行产品)的功能,例如微信的聊天......
  • [刷题笔记] Luogu P2340 [USACO03FALL] Cow Exhibition G
    ProblemSolution乍看可能没有思路。我们注意到本题是牵扯到一头奶牛选or不选的问题,非常自然地想到01背包。接下来我们就尝试将本题背景转换成01背包问题。我们可以将智商转换成容量,情商转换成价值。(当然反过来也可)然后就可以套用01背包板子了:\[f_{i,j}=min(f_{i-1,j},f_{i-1......