本文共 649 字,大约阅读时间需要 2 分钟。
树的直径(树形dp):
两次dfs,一次由下至上,一次又上至下。
#includeusing namespace std;#define maxn 10005int n;vector > m[maxn];int deep1[maxn];int deep1id[maxn];int deep2[maxn];int ans[maxn];void init(){ memset(deep1,0,sizeof(deep1)); memset(deep1id,0,sizeof(deep1id)); memset(deep2,0,sizeof(deep2)); memset(ans,0,sizeof(ans)); for(int i=0;i >().swap(m[i]);}int getdis(int a,int fa){ for(int i=0;i = deep2[a]) deep2[a] = t; if(deep2[a] >= deep1[a]) swap(deep1[a],deep2[a]),deep1id[a] = c; } return deep1[a];}void putdis(int a,int fa,int key){ ans[a] = max(deep1[a],key); for(int i=0;i
转载地址:http://bywji.baihongyu.com/