zoukankan      html  css  js  c++  java
  • 牛客小白月赛6-桃花

    时间限制 1000ms 空间限制 262144KB

    题目:

      桃花一簇开无主,可爱深红映浅红。

                                            ——《题百叶桃花》

        桃花长在桃树上,树的每个节点有一个桃花,调皮的HtBest想摘尽可能多的桃花。HtBest有一个魔法棒,摘到树上任意一条链上的所有桃花,由于HtBest法力有限,只能使用一次魔法棒,请求出Htbest最多可以摘到多少个桃花。

    输入:
    第一行有一个正整数n,表示桃树的节点个数。
    接下来n-1行,第i行两个正整数ai,bi ,表示桃树上的节点ai,bi之间有一条边。

    1<=n<=1000000.数据很大用scanf。

    输出:

    第一行一个整数,表示HtBest使用一次魔法棒最多可以摘到多少桃花。

    样例输入:

    4
    1 2
    2 3
    3 4

    样例输出:

    4

    思路:树的直径

    AC代码:

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<queue>
    #define INF 0x3f3f3f3f
    #define ONF 0xc0c0c0c0
    using namespace std;
    typedef long long ll;
    int par[1000005],num[1000005];
    void init(int n)
    {
        for(int i=1;i<=n;i++)
        {
            par[i]=i;
            num[i]=1;
        }
    }
    int get_par(int x)
    {
        return par[x]==x?x:par[x]=get_par(par[x]);
    }
    void doit(int x,int y)
    {
        int dx=get_par(x);
        int dy=get_par(y);
        if(dx!=dy)
        {
            par[dx]=dy;
            num[dy]=num[dx]+num[dy];
        }
    }
    int main()
    {
        int n,x,y;
        scanf("%d",&n);
        init(n);
        for(int i=1;i<=n-1;i++)
        {
            scanf("%d %d",&x,&y);
            doit(x,y);
        }
        int Max=0;
        for(int i=1;i<=n;i++)
        {
            Max=max(Max,num[i]);
        }
        printf("%d
    ",Max);
    }
    

    注意:这个题要用int,用long long 会超时,貌似long long 运算比int 要慢点如果是32位测评。

  • 相关阅读:
    基于Modelsim的直方图线性拉伸
    基于Modelsim的直方图统计算法仿真
    基于Modelsim的均值滤波仿真
    基于Modelsim的直方图均衡化算法仿真
    基于FPGA的RGB图像转灰度图像算法实现
    基于Modelsim的视频捕获模拟仿真
    基于Modelsim的视频流仿真
    【MSSQL】执行大sql文件-内容乱码处理
    【WINForm】C#应用程序图标设置问题
    【dotNet Core】Swagger下简单的给WebApi分组
  • 原文地址:https://www.cnblogs.com/Leozi/p/13281229.html
Copyright © 2011-2022 走看看