题意:一棵有n个结点的树,要取其中的一个结点,使得该结点到其他所有结点的距离和dis最小,即损耗I * I * R * dis最小,输出最小损耗和该结点(有多个的话按结点编号从小到大输出)(3 <= n <= 50000, 1 <= I <= 10, 1 <= R <= 50)。

题目链接:http://poj.org/problem?id=4045

——>>怒刷树状dp。。。

设cnt[i]为以i为根的子树的结点数,d[i]为以i为根的子树中所有结点到i的距离和,一次dfs求出*cnt和*d,则

状态转移方程为:cnt[x] += cnt[v[e]];

d[x] += d[v[e]] + cnt[v[e]];(v[e]为x的子结点)

设f[i]为以i为根,刚才dfs中i的父结点为孩子,新生子树中所有结点到i的距离和,再一次dfs,即dp,则

状态转移方程为:f[x] = d[fa] - d[x] - cnt[x] + f[fa] + n -cnt[x] = d[fa] - d[x] - 2 * cnt[x] + f[fa] + n;(x为第一次dfs中fa的子结点)。

注意:用64位整数。

#include <cstdio>
#include <cstring>
#include <algorithm> using namespace std; const int maxn = 50000 + 10;
const int INF = 0x3f3f3f3f;
int n, I, R, head[maxn], nxt[maxn<<1], u[maxn<<1], v[maxn<<1], ecnt, cnt[maxn];
long long d[maxn], f[maxn]; void init(){
ecnt = 0;
memset(head, -1, sizeof(head));
} void addEdge(int uu, int vv){
u[ecnt] = uu;
v[ecnt] = vv;
nxt[ecnt] = head[uu];
head[uu] = ecnt;
ecnt++;
} void read(){
int i, uu, vv;
scanf("%d%d%d", &n, &I, &R);
for(i = 0; i < n-1; i++){
scanf("%d%d", &uu, &vv);
addEdge(uu, vv);
addEdge(vv, uu);
}
} void dfs(int x, int fa){
d[x] = 0;
for(int e = head[x]; e != -1; e = nxt[e]) if(v[e] != fa){
dfs(v[e], x);
cnt[x] += cnt[v[e]];
d[x] += d[v[e]] + cnt[v[e]];
}
} void dp(int x, int fa){
if(x == 1) f[x] = 0;
else f[x] = d[fa] - d[x] - 2 * cnt[x] + f[fa] + n;
for(int e = head[x]; e != -1; e = nxt[e]) if(v[e] != fa) dp(v[e], x);
} void solve(){
int i, flag = 1;
long long Min = INF;
for(int i = 1; i <= n; i++) cnt[i] = 1;
dfs(1, -1);
dp(1, -1);
for(i = 1; i <= n; i++) Min = min(Min, d[i] + f[i]);
printf("%I64d\n", I * I * R * Min);
for(i = 1; i <= n; i++) if(d[i] + f[i] == Min) {
if(flag) flag = 0;
else putchar(' ');
printf("%d", i);
}
puts("\n");
} int main()
{
int T;
scanf("%d", &T);
while(T--){
init();
read();
solve();
}
return 0;
}

poj - 4045 - Power Station的更多相关文章

  1. poj 1459 Power Network

    题目连接 http://poj.org/problem?id=1459 Power Network Description A power network consists of nodes (pow ...

  2. POJ 1459 Power Network / HIT 1228 Power Network / UVAlive 2760 Power Network / ZOJ 1734 Power Network / FZU 1161 (网络流,最大流)

    POJ 1459 Power Network / HIT 1228 Power Network / UVAlive 2760 Power Network / ZOJ 1734 Power Networ ...

  3. 贪心 POJ 2109 Power of Cryptography

    题目地址:http://poj.org/problem?id=2109 /* 题意:k ^ n = p,求k 1. double + pow:因为double装得下p,k = pow (p, 1 / ...

  4. poj 1459 Power Network : 最大网络流 dinic算法实现

    点击打开链接 Power Network Time Limit: 2000MS   Memory Limit: 32768K Total Submissions: 20903   Accepted:  ...

  5. poj 1459 Power Network【建立超级源点,超级汇点】

    Power Network Time Limit: 2000MS   Memory Limit: 32768K Total Submissions: 25514   Accepted: 13287 D ...

  6. POJ 1459 Power Network(网络流 最大流 多起点,多汇点)

    Power Network Time Limit: 2000MS   Memory Limit: 32768K Total Submissions: 22987   Accepted: 12039 D ...

  7. 2018.07.06 POJ 1459 Power Network(多源多汇最大流)

    Power Network Time Limit: 2000MS Memory Limit: 32768K Description A power network consists of nodes ...

  8. poj 2406 Power Strings 后缀数组解法

    连续重复子串问题 poj 2406 Power Strings http://poj.org/problem?id=2406 问一个串能否写成a^n次方这种形式. 虽然这题用kmp做比较合适,但是我们 ...

  9. KMP POJ 2406 Power Strings

    题目传送门 /* 题意:一个串有字串重复n次产生,求最大的n KMP:nex[]的性质应用,感觉对nex加深了理解 */ /************************************** ...

随机推荐

  1. 几个常用道的macro

    几个常用道的macro1.macro(1)#error msg 指令使編譯器停止執行並打印一條語句,(2)printf("%d,%s",_LINE_,_FILE_)打印當前行號和文 ...

  2. Zigbee、WiFi和433MHz无线技术各有特点

    Zigbee.WiFi和433MHz无线技术都属于近距离无线通讯技术,并且都使用ISM免执照频段,但它们各具特点.   ZigBee的特点是低功耗.高可靠性.强抗干扰性,布网容易,通过无线中继器可以非 ...

  3. 并发(Concurrency)和并行(Parallelism)的区别

    最近在读<real world haskell>里关于并行的一章时,看到作者首先对并发(Concurrency)和并行(Parallelism)的区别进行了定义和解释.以前我对这个问题也是 ...

  4. [置顶] 深入浅出Spring(三) AOP详解

    上次的博文深入浅出Spring(二) IoC详解中,我为大家简单介绍了一下Spring框架核心内容中的IoC,接下来我们继续讲解另一个核心AOP(Aspect Oriented Programming ...

  5. iOS7 UIKit动力学-碰撞特性UICollisionBehavior 下

    上文讲到了为window加一个边界.实现碰撞的效果,接下来我们将提到一个托付方法: - (void)collisionBehavior:(UICollisionBehavior *)behavior ...

  6. 【简单项目框架一】Fragment实现的底部导航

    流行的应用的导航一般分为两种,一种是底部导航,一种是侧边栏. 我所做的项目涉及到比较多的是底部导航,今天我就把项目中使用的一种实现方式分享一下. 主要实现思路是:在一个Activity里面底部添加四个 ...

  7. UIPageViewController-浅析

    一.UIPageViewController概念   控件为我们提供了一种像翻书效果的一种控件.我们可以通过使用UIPageViewController控件,来完成类似图书一样的翻页控制方式.   二 ...

  8. math方法集合

    math.abs(x)     返回数的绝对值.math.acos(x)     返回数的反余弦值.math.asin(x)     返回数的反正弦值.math.atan(x)     以介于 -PI ...

  9. AES 加密,C#后台,javascript前台,crypt-js

    javascript前台代码 <script src="http://apps.bdimg.com/libs/crypto-js/3.1.2/components/core-min.j ...

  10. linux 链接控制

    如发现系统存在大量TIME_WAIT状态的连接,通过调整内核参数解决,vim /etc/sysctl.conf编辑文件,加入以下内容:net.ipv4.tcp_syncookies = 1net.ip ...