POJ3107&&POJ1655【树形DP/简单搜索】
2017-05-22 20:26
387 查看
写完1655无聊翻了翻discuss,然后顺便改改过了3107…
定义一个节点的节点的平衡值为删除这个节点后产生分支连通块元素最大的数量。
可能有多种方案,按编号顺序输出。
答案:node_ans: max{n−dp[node],{dp[u],u∈NODE_SON}};
然后每次取个小值就好了。
定义一个节点的节点的平衡值为删除这个节点后产生分支连通块元素最大的数量。
POJ3107题意:
给一颗n个结点的树,节点编号为1~n,可能有多种方案,按编号顺序输出。
POJ1655题意:
如果多种方案只取最小节点编号并输出这个值。思路:
dp[node] 代表以 node 为根的子树的节点数量。答案:node_ans: max{n−dp[node],{dp[u],u∈NODE_SON}};
然后每次取个小值就好了。
POJ3107Code:
//#include <bits/stdc++.h> #include<iostream> #include<vector> #include<cstdio> #include<string.h> #include<algorithm> using namespace std; typedef pair<int,int> PII; typedef long long LL; //#pragma comment(linker, "/STACK:102400000,102400000") const int N=5e4+10; struct Edge { int v; int next; } edge[N<<1]; int head ,tol; int n; void init() { tol=0; memset(head,-1,sizeof(head)); } void add(int u,int v) { edge[tol].v=v; edge[tol].next=head[u]; head[u]=tol++; } bool vis ; int ans,dp ; vector<int>node; void DFS(int u){ int temp1,temp2,v; int Min = 0,sum=0; dp[u]=1; for(int i=head[u];~i;i=edge[i].next){ v = edge[i].v; if(vis[v]) continue; vis[v]=true; DFS(v); Min = max(Min,dp[v]); sum += dp[v]; } dp[u] = sum + dp[u]; temp1 = n - dp[u]; if(Min) temp2 = Min; temp1 = max(temp1,temp2); if(ans > temp1){ ans = temp1; node.clear(); node.push_back(u); } else if(ans == temp1) node.push_back(u); } void input(){ int u,v; scanf("%d",&n); init(); for(int i=1; i<n; i++){ scanf("%d%d",&u,&v); add(u,v); add(v,u); } } void solve(){ memset(vis,false,sizeof(vis)); vis[1]=true; ans = n; node.clear(); DFS(1); sort(node.begin(),node.end()); int sz = node.size(); for(int i=0;i<sz;i++){ if(i) printf(" "); printf("%d",node[i]); } } int main(){ input(); solve(); return 0; }
相关文章推荐
- POJ1655-树的重心&树形dp-Balancing Act
- poj 1655 简单树形dp
- 简单树形dp-poj-1655-Balancing Act
- POJ 1655 简单树形dp
- POJ--1655--Balancing Act--简单树形DP
- POJ 1655 Balancing Act 树形DP入门题
- poj 1655树形dp && poj 3107 &&poj 2378 && poj 3140
- poj 1103 & zoj 1142 Maze (图形模拟+简单搜索)
- poj 2342 Anniversary party 简单树形dp
- (简单) 树形dp+概率 POJ 3071 Football
- POJ 1463 && HDU 1054 Strategic Game (树形DP)
- poj 2342 Anniversary party 简单树形dp
- poj 2342 Anniversary party(简单树形dp+dfs)
- poj 1655 Balancing Act(树形DP,删点)
- 树形DP <简单树形DP 对我来说重点在建树> hlg 1474
- poj&nbsp;1155&nbsp;TELE&nbsp;树形dp
- POJ 1655 Balancing Act(简单树状DP)
- poj 1192最优连通子集(简单树形dp)
- poj 1655 树形DP
- POJ 2342 简单树形dp