poj 1655 Balancing Act
2012-03-06 12:59
316 查看
类型:DFS
来源:POJ Monthly--2004.05.15 IOI 2003 sample task
题目:一棵树,定义每个节点的balance值:去掉这点节点后的森林里所有树的最大节点数。求出最小的balance值和其所对应的节点编号
思路:通过邻接表构造以1为根的二叉树,对其进行dfs,对于待删除节点u,其balance值为各个以u为根的子树的节点数的最大值或者除该树(u为根)以外的节点的数量。统
计每个根的balance值比较得结果
来源:POJ Monthly--2004.05.15 IOI 2003 sample task
题目:一棵树,定义每个节点的balance值:去掉这点节点后的森林里所有树的最大节点数。求出最小的balance值和其所对应的节点编号
思路:通过邻接表构造以1为根的二叉树,对其进行dfs,对于待删除节点u,其balance值为各个以u为根的子树的节点数的最大值或者除该树(u为根)以外的节点的数量。统
计每个根的balance值比较得结果
// poj 1655 Balancing Act // 664K 47MS #include <iostream> #include <cstdio> #include <cstring> using namespace std; #define FOR(i,a,b) for(i = (a); i < (b); ++i) #define FORE(i,a,b) for(i = (a); i <= (b); ++i) #define CLR(a,b) memset(a,b,sizeof(a)) const int MAXN = 20010; const int INF = 0x7f7f7f7f; int cas, n; int cnt, minnum, endi; bool vis[MAXN]; int head[MAXN], num[MAXN]; struct node { int v, nxt; }p[MAXN * 2]; void addedge(int u, int v) { p[cnt].v = v; p[cnt].nxt = head[u]; head[u] = cnt++; p[cnt].v = u; p[cnt].nxt = head[v]; head[v] = cnt++; } void dfs(int u) { int i; int maxnum = -1; //!!! num[u] = 1; for(i = head[u]; i; i = p[i].nxt) { int v = p[i].v; if(!vis[v]) { vis[v] = true; dfs(v); //!!! num[u] += num[v]; maxnum = max(maxnum, num[v]); } } maxnum = max(maxnum, n - num[u]); if(maxnum < minnum) minnum = maxnum, endi = u; return; } int main() { int i, u, v; scanf("%d", &cas); while(cas--) { CLR(head, 0); CLR(vis, false); CLR(num, 0); cnt = 1; minnum = INF; scanf("%d", &n); FOR(i, 0, n - 1) { scanf("%d %d", &u, &v); addedge(u, v); } vis[1] = true; dfs(1); printf("%d %d\n", endi, minnum); } return 0; }
相关文章推荐
- POJ 1655 Balancing Act 树的重心
- POJ 1655 Balancing Act(求树的重心--树形DP)
- (POJ 1655 Balancing Act)树型DP + 删点
- POJ 1655 Balancing Act【树的重心】
- Balancing Act - POJ 1655 树形dp
- poj 1655 Balancing Act(树形DP)
- POJ 1655 Balancing Act (求树的重心)
- poj 1655 Balancing Act 【树的重心】
- POJ-1655-Balancing Act
- poj 1655 Balancing Act(树的重心,树形dp)
- POJ 1655 Balancing Act (树的重心)
- poj1655 Balancing Act 【树形DP(很弱)】
- poj 1655 Balancing Act(树dp)
- poj 1655 Balancing Act 寻找树的重心
- POJ 1655 Balancing Act (dfs)
- POJ 1655 Balancing Act (树形dp 树的重心)
- POJ 1655 Balancing Act (树的重心)
- POJ 1655 Balancing Act【树的重心】
- POJ 1655 Balancing Act 树的重心
- poj-1655 Balancing Act(树的重心+树形dp)