SGU 149. Computer Network( 树形dp )
题目大意:给N个点,求每个点的与其他点距离最大值 很经典的树形dp...很久前就想写来着...看了陈老师的code才会的...mx[x][0], mx[x][1]分别表示x点子树里最长的2个距离, dfs一遍得到. mx[x][2]表示从x的父亲到x的最长路径长度, 也是dfs一遍得到(具体看代码)。最后答案就是max(mx[x][0], mx[x][2]). 时间复杂度O(N) -------------------------------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int maxn = 10009; int N, mx[maxn][3]; struct edge { int to, w; edge* next; } E[maxn << 1], *pt = E, *head[maxn]; void AddEdge(int u, int v, int w) { pt->to = v; pt->w = w; pt->next = head[u]; head[u] = pt++; } void Init() { scanf("%d