POJ 3107 Godfather
2012-10-15 14:26
330 查看
静态链表。。STL要超时。。
View Code
View Code
#include <iostream> #include <cstdio> #include <vector> #include <cstring> using namespace std; vector<int> G[50001]; int dp[50001],visit[50001],head[50001]; int n,k; struct Edge { int v; int next; }edge[50001 * 2]; int max(int a,int b) { return a > b ? a : b; } int min(int a,int b) { return a < b ? a : b; } void addedge(int a,int b) { edge[k].v = b; edge[k].next = head[a]; head[a] = k; k++; } int dfs(int u) { visit[u] = true; int sum = 1,temp; for(int i = head[u];i;i = edge[i].next) { int v = edge[i].v; if(visit[v]) continue; temp = dfs(v); sum += temp; dp[u] = max(dp[u],temp); } dp[u] = max(dp[u],n - sum); return sum; } int main() { scanf("%d",&n); int a,b; memset(visit,false,sizeof(visit)); memset(dp,0,sizeof(dp)); memset(head,0,sizeof(head)); k = 1; for(int i = 1;i <= n - 1;i++) { scanf("%d%d",&a,&b); addedge(a,b); addedge(b,a); } dfs(1); int ans = 0xffffff; for(int i = 1;i <= n;i++) { ans = min(ans,dp[i]); } bool flag = true; for(int i = 1;i <= n;i++) { if(dp[i] == ans) { if(flag) { printf("%d",i); flag = false; } else { printf(" %d",i); } } } printf("\n"); return 0; }
相关文章推荐
- POJ 1655 Balancing Act && POJ 3107 Godfather
- POJ 3107 Godfather 树状DP
- poj 3107 Godfather
- 【POJ】3107 Godfather 树形dp
- poj 3107 Godfather
- Poj 3107 Godfather (树的重心)
- POJ 3107 Godfather 【树形DP】
- POJ 3107 Godfather(树形DP)
- POJ 3107 Godfather
- 【求树的重心】POJ - 3107 Godfather
- poj 3107 Godfather(树的重心问题)
- poj 3107 Godfather(树形dp)
- POJ 3107 Godfather(树形DP)
- POJ 3107 Godfather(DFS)
- POJ 3107 Godfather
- POJ 3107 Godfather
- poj 3107 Godfather 求树的重心
- POJ - 3107 Godfather【树形dp+树的重心】
- POJ 3107 Godfather(树的重心)
- poj 3107 Godfather(树形dp)