zoukankan      html  css  js  c++  java
  • HihoCoder1050 树中的最长路 树形DP第三题(找不到对象)

    题意:求出的树中距离最远的两个结点之间相隔的距离

    水题一道,以前只会用路的直径来解。

    代码如下:

    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<iostream>
    #include<memory>
    #include<algorithm>
    using namespace std;
    const int maxn=200010;
    int dis[maxn],Laxt[maxn],Next[maxn],To[maxn];
    int cnt,S,Max;
    void add(int u,int v)
    {
        Next[++cnt]=Laxt[u];
        Laxt[u]=cnt;
        To[cnt]=v;
    }
    void _dfs(int u)
    {
        for(int i=Laxt[u];i;i=Next[i]){
            if(!dis[To[i]]){
                dis[To[i]]=dis[u]+1;
                if(dis[To[i]]>Max){
                    Max=dis[To[i]];
                    S=To[i];
                }
                _dfs(To[i]);
            }
        }
    }
    int main()
    {
        int n,i,j,u,v;
        scanf("%d",&n);
        for(i=1;i<n;i++){
            scanf("%d%d",&u,&v);
            add(u,v);
            add(v,u);
        }
        dis[1]=1;S=1;Max=1;
        _dfs(1);
        memset(dis,0,sizeof(dis));
        dis[S]=1;Max=1;
        _dfs(S);
        printf("%d
    ",Max-1);
    }

    树形DP:

    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<iostream>
    #include<memory>
    #include<algorithm>
    using namespace std;
    const int maxn=200010;
    int Laxt[maxn],Next[maxn],To[maxn];
    int dp[maxn],vis[maxn];
    int cnt,ans;
    void add(int u,int v)
    {
        Next[++cnt]=Laxt[u];
        Laxt[u]=cnt;
        To[cnt]=v;
    }
    int _dfs(int u)
    {
        for(int i=Laxt[u];i;i=Next[i]){
            if(!vis[To[i]]){
                vis[To[i]]=1;
                _dfs(To[i]);
                ans=max(ans,dp[u]+dp[To[i]]+1);
                dp[u]=max(dp[u],dp[To[i]]+1);
            }
        }
        return dp[u];
    }
    int main()
    {
        int n,i,j,u,v;
        scanf("%d",&n);
        for(i=1;i<n;i++){
            scanf("%d%d",&u,&v);
            add(u,v);
            add(v,u);
        }
        vis[1]=1;
        _dfs(1);
        printf("%d
    ",ans);
        return 0;
    }
  • 相关阅读:
    java JSONObject
    android 8.0 悬浮窗 最简demo
    使用adb 命令(atrace)抓起systrace的方法。
    使用python处理selenium中的获取元素属性
    使用adb/Linux获取网关ip
    Requests text乱码
    python-uiautomator2
    adb命令 判断锁屏
    缓存穿透、缓存击穿与缓存雪崩
    ReentrantLock重入锁详解
  • 原文地址:https://www.cnblogs.com/hua-dong/p/7774647.html
Copyright © 2011-2022 走看看