POJ 4045 Power Station 解题报告

题目


题意:

有一个树形电网,要在某个节点建一个发电站,传输损耗是 I^2*Ri,Ri是总的电阻, 跟到各点距离总和有关。I是常数。

问最小的损耗,并输出最优的节点。

解法:

DFS两次统计每个点到其它点的距离总和即可。

Time:125ms
Memory:5216KB
Length:2039B
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define DBLE 1e-8
#define PI 3.1415926535898
#define INF (100000000000LL)
#define MAXN 100010
#define MP(x,y) (make_pair((x),(y)))
#define FI first
#define SE second
using namespace std;
int he[MAXN],to[MAXN],nex[MAXN],top,node[MAXN];
long long num[MAXN],ans;
vector vec;
void add(int a,int b)
{
    nex[top]=he[a];
    to[top]=b;
    he[a]=top++;
}
pair dfs1(int h,int fa)
{
    node[h]=1;
    pair pa;
    for(int i=he[h];i!=-1;i=nex[i])
        if(to[i]!=fa)
        {
            pa=dfs1(to[i],h);
            node[h]+=pa.FI;
            num[h]+=pa.SE+pa.FI;
        }
    return MP(node[h],num[h]);
}
void dfs2(int h,int fa,pair pa)
{
    pair tpa=pa,ttpa;
    num[h]+=pa.SE+pa.FI;
    if(num[h]<=ans)
    {
        if(num[h]


你可能感兴趣的:(水题,搜索,简单)