题意:一棵有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. D、GO、Rust 谁会在未来取代 C?为什么?——Go语言的定位非常好,Rust语言非常优秀,D语言也不错

    不要管我的地位和 D 语言创造者之一的身份.我会坦诚的回答这个问题.我熟悉 Go 和 Rust,并且知道 D 的缺点在哪里.我鼓励人们在 Rust 和 Go 社区相似身份的人,也可以提出他们诚恳的观点 ...

  2. let区别(关于racket和r5rs)

    R5RS is the Revised5 Report on the Algorithmic Language Scheme.参考http://www.schemers.org/Documents/S ...

  3. iOS Xcode工程目录的 folder 和 group的区别(蓝色和黄色文件夹的区别)

    1. 来自 http://blog.csdn.net/fanjunxi1990/article/details/9352917 XCode工程目录里面,有时你会发现2个不同颜色的文件夹,一种是蓝色的, ...

  4. android 读取txt文件内容

    Android的res文件夹是用来存储资源的,可以在res文件夹下建立一个raw文件夹,放置在raw文件夹下的内容会被原样打包,而不会被编译成二进制文件,并且可以通过R文件进行很方便地访问. 比如我们 ...

  5. c++错误崩溃3

    使用了new申请了内存但是没有释放内存, 在程序长时间运行过程中不断的申请内存导致内存满了,再向内存写数据的时候回崩溃

  6. 【Android Training UI】创建自定义Views(Lesson 1 - 创建一个View类)

    发布在我的网站 http://kesenhoo.github.io/blog/2013/06/30/android-training-ui-creating-custom-views-lesson-1 ...

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

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

  8. twitter 监控登陆活动

    http://vicenteaguileradiaz.com/download/tinfoleak/tinfoleak-1.2.tar.gz

  9. R基础

    R的对象类型包括数值型(numeric),复数型(complex),逻辑型(logical),字符型(character)和原味型(raw),列表(list)递归结构:函数(function)和表达式 ...

  10. JAVASCRIPT——文字出现效果练习

    写一句诗.诗的最初状态是隐藏的,效果是让诗缓慢出现,直到显示完全 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional// ...