BZOJ 1131: [POI2008]Sta 树形DP
2017-02-10 15:17
375 查看
Description
给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大
Input
给出一个数字N,代表有N个点.N<=1000000 下面N-1条边.
Output
输出你所找到的点,如果具有多个解,请输出编号最小的那个.
Sample Input
8
1 4
5 6
4 5
6 7
6 8
2 4
3 4
Sample Output
7
解题方法: 裸树DP,发现把根从一个点的父亲移到这个节点DP值的变化差值是delta=(n−size[x])−size[x]。
给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大
Input
给出一个数字N,代表有N个点.N<=1000000 下面N-1条边.
Output
输出你所找到的点,如果具有多个解,请输出编号最小的那个.
Sample Input
8
1 4
5 6
4 5
6 7
6 8
2 4
3 4
Sample Output
7
解题方法: 裸树DP,发现把根从一个点的父亲移到这个节点DP值的变化差值是delta=(n−size[x])−size[x]。
#include <bits/stdc++.h> using namespace std; typedef long long LL; const int maxn = 1000005; LL dp[1000005]; int n, ans, edgecnt, head[maxn], dep[maxn], siz[maxn]; void init(){ memset(head, -1, sizeof(head)); edgecnt = 0; } struct edge{int v, nxt; } E[2000005]; void addedge(int u, int v){ E[edgecnt].v = v, E[edgecnt].nxt = head[u], head[u] = edgecnt++; } void dfs1(int x, int fa){ siz[x] = 1; dp[x] = dep[x]; for(int i = head[x]; ~i; i = E[i].nxt){ int v = E[i].v; if(v == fa) continue; dep[v] = dep[x] + 1; dfs1(v, x); dp[x] += dp[v]; siz[x] += siz[v]; } } void dfs2(int x, int fa) { for(int i = head[x]; ~i; i = E[i].nxt){ int v = E[i].v; if(v == fa) continue; dp[v] = dp[x] + n - 2 * siz[v]; dfs2(v, x); } } int main(){ init(); scanf("%d", &n); for(int i = 1; i < n; i++){ int u, v; scanf("%d%d", &u, &v); addedge(u, v); addedge(v, u); } dfs1(1, -1); dfs2(1, -1); for(int i = 1; i <= n; i++){ if(dp[i] > dp[ans]) ans = i; } return printf("%d\n", ans); }
相关文章推荐
- bzoj 1131: [POI2008]Sta 树形dp
- bzoj 1131: [POI2008]Sta(树形DP)
- luogu 3478 bzoj 1131 poi2008 sta 树形dp
- BZOJ 1131 POI2008 Sta 树形DP
- 【bzoj1131】[POI2008]Sta 树形dp
- BZOJ 1131 [POI2008]Sta(树形DP)
- [bzoj1131][POI2008]Sta_树形dp
- BZOJ 1131 [POI2008]Sta 树形DP
- bzoj1131 [POI2008]Sta(树形dp)
- BZOJ 1131 POI2008 Sta 树形DP
- [BZOJ1131][POI2008]Sta(树形dp+维护)
- 1131: [POI2008]Sta (树形DP)
- [BZOJ1131][POI2008]Sta(树形dp+维护)
- 【BZOJ-1131】Sta 树形DP
- BZOJ1131 [POI2008]Sta 树DP
- [bzoj1131][POI2008]Sta(树上dp)
- bzoj 1131: [POI2008]Sta
- bzoj1131: [POI2008]Sta
- 【POI2008】【BZOJ1131】Sta
- BZOJ1131: [POI2008]Sta