[树形DP]HDU 4008 Parent and son

2014-11-24 07:57:56 · 作者: · 浏览: 0

原题直通车:HDU 4008 Parent and son

分析:

如果a、b之间存在一条边,那么把a当树根和把b当树根只在a, b这两结点的信息有所区别,其它的不变。

所以,先以任意一个点做为根的所求出每个点的最小孩子min_son、最小子孙min_des

然后,就可分别把树根转移到其它结点时,每个点的最小孩子、最小子孙求出。

代码:

#include
  
   
#include
   
     #include
    
      #include
     
       #include
      
        using namespace std; const int maxn=100005; vector
       
        G[maxn]; vector< pair
        
          >Q[maxn]; int min_son[maxn], min_des[maxn]; int ans1[maxn], ans2[maxn]; bool vis[maxn]; void dfs(int cnt) { min_son[cnt]=maxn, min_des[cnt]=maxn; vis[cnt]=true; int len=G[cnt].size(); for(int i=0; i