poj 4045

http://poj.org/problem?id=4045

 

思路:

   1.先用一次dfs() 求出顶点 1 安放power station 的答案 和 各个顶点为根的树的顶点数

   2。dfs()每个边 u- > v , 如果已知ans[ u ]  那么  ans[ v ] = ans[u]  + n -cnt[ v ]  - cnt[ v ] 

代码转自 :http://fayaa.com/code/view/26409/

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
typedef __int64 ll;
#define MAXN 50010

vector e[MAXN],ans;
int cnt[MAXN],dsum[MAXN];
int dmin[MAXN],n;

void dfs(int pre,int u)
{
    cnt[u]=1;
    dsum[u]=0;
    for(int i=0;i


你可能感兴趣的:(poj 4045)