POJ 3107 Godfather (树的重心)
2015-09-25 09:55
736 查看
题意:求树的重心,若有多个,全部打印出来。
思路:
树的重心:在删除点v后,森林中的每棵树的节点数尽量均匀,若最大的那棵树的节点数最小,称v为树的重心。
这道题只是求树的所有重心,当且经当这棵树有对称性质时才有多重心,因此一棵树的重心最多不会超过2个。也是一遍DFS就可以搞定了,参考这个。
AC代码
思路:
树的重心:在删除点v后,森林中的每棵树的节点数尽量均匀,若最大的那棵树的节点数最小,称v为树的重心。
这道题只是求树的所有重心,当且经当这棵树有对称性质时才有多重心,因此一棵树的重心最多不会超过2个。也是一遍DFS就可以搞定了,参考这个。
//#include <bits/stdc++.h> #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <map> #include <deque> #include <algorithm> #include <vector> #include <iostream> #define pii pair<int,int> #define max(x,y) ((x)>(y)?(x):(y)) #define min(x,y) ((x)<(y)?(x):(y)) #define INF 0x7f7f7f7f #define LL long long using namespace std; const double PI = acos(-1.0); const int N=51000; int n, cnt, edge_cnt, head ; struct node { int from, to, next; node(){}; node(int from,int to,int next):from(from),to(to),next(next){}; }edge[N*2]; void add_node(int from,int to) { edge[edge_cnt]=node(from,to,head[from]); head[from]=edge_cnt++; } deque<int> que; int DFS(int t,int far) { node e; int big=0, sum=0; for(int i=head[t]; i!=-1; i=e.next) { e=edge[i]; if(e.to==far) continue; int tmp=DFS(e.to, t); big=max(big, tmp); sum+=tmp; } big=max(big, n-sum-1); if(big<=cnt) { if(big<cnt) que.clear(); cnt=big; que.push_back(t); } return sum+1; } int main() { //freopen("input.txt", "r", stdin); int a, b; while(~scanf("%d",&n)) { edge_cnt=0; cnt=INF; memset(head,-1,sizeof(head)); for(int i=1; i<n; i++) { scanf("%d%d",&a,&b); add_node(a,b); add_node(b,a); } DFS(1,-1); sort(que.begin(),que.end()); while(!que.empty()) { printf("%d ",que.front()); que.pop_front(); } puts(""); } return 0; }
AC代码
相关文章推荐
- Google ptorobuf相关知识
- Google ptorobuf相关知识
- Google ptorobuf相关知识
- Google ptorobuf相关知识
- Google ptorobuf相关知识
- Google ptorobuf相关知识
- Google ptorobuf相关知识
- Google ptorobuf相关知识
- Google ptorobuf相关知识
- Google ptorobuf相关知识
- Google ptorobuf相关知识
- Google ptorobuf相关知识
- Google ptorobuf相关知识
- Google ptorobuf相关知识
- Google ptorobuf相关知识
- Google ptorobuf相关知识
- Google ptorobuf相关知识
- Google ptorobuf相关知识
- Google ptorobuf相关知识
- Google ptorobuf相关知识