牛客小白月赛6 C

版权声明:欢迎复制!!! https://blog.csdn.net/qq_37493070/article/details/81813668
简单树形dp 类似 HDU 2196 (视乎不是正解)

题目链接 : https://www.nowcoder.com/acm/contest/136/C
就是初始化不一样了,HDU初始化dp为0 而这个每个节点的值为1 ,就把初始化改一下就过了 …
附上 : HDU 2196

直接上代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod = 1e9 + 7;
const int maxn = 1e6 + 10;
int dp[maxn][3];
int f[maxn];
vector<int>q[maxn];
int dfs(int u,int fa){

    dp[u][1]=dp[u][0]=1;
    for(int i=0;i<q[u].size();i++){
        int v=q[u][i];
        if(v==fa) continue;
        int ans=dfs(v,u);
        if(ans+1 >dp[u][0]){
            dp[u][1]=dp[u][0];
            dp[u][0]=ans+1;
            f[u]=v;

        }
        else if(ans+1>dp[u][1]){
            dp[u][1]=ans+1;
        }

    }
        return dp[u][0];

}
void dfss(int u,int fa){

    for(int i=0;i<q[u].size();i++){
       int  v=q[u][i];
        if(v==fa) continue;
        if(f[u]!=v) dp[v][2]=max(dp[u][0]+1,dp[u][2]+1);
        else dp[v][2]=max(dp[u][1]+1,dp[u][2]+1);
        dfss(v,u);
    }

}
int main()
{
    ios::sync_with_stdio(false);
    int n,m;
    cin>>n;
    for(int i=1;i<n;i++){
        int a,b;
        cin>>a>>b;
        q[a].push_back(b);
        q[b].push_back(a);
    }
    dfs(1,-1);
    dfss(1,-1);
    int ans=0;
    for(int i=1;i<=n;i++){
        ans=max(ans,max(dp[i][0],dp[i][2]));
    }
    cout<<ans<<endl;
    return 0;
}

这次评测机好卡……比赛时傻逼了,dfss写的有返回值,但没有返回数值,一直pe,xl大佬一眼就看出来了……

附牛客ac链接:https://www.nowcoder.com/acm/contest/view-submission?submissionId=32126690

猜你喜欢

转载自blog.csdn.net/qq_37493070/article/details/81813668