题意:一棵有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. 在类似qq或者微信聊天中。如何根据不同的手机发送图片

    原文:在类似qq或者微信聊天中.如何根据不同的手机发送图片   前一段时间,公司自己要求做多客服开发,但是对于发送图片这一块,当时很苦恼,我用自己的手机(米2)测试,不管是本地,还是云相册,最新照片. ...

  2. haproxy hdr和path

    path : string This extracts the request's URL path, which starts at the first slash and ends before ...

  3. xcode 5与ios 7的屏幕适配问题

    #define DEVICE_IS_IPHONE5 ([[UIScreen mainScreen] bounds].size.height == 568) float height = DEVICE_ ...

  4. 百度地图V2.0实践项目开发工具类bmap.util.js V1.4

    /** * 百度地图使用工具类-v2.0(大眾版) * * @author boonya * @date 2013-7-7 * @address Chengdu,Sichuan,China * @em ...

  5. linux底半部机制在视频采集驱动中的应用

    最近在做一个arm+linux平台的视频驱动.本来这个驱动应该是做板子的第三方提供的,结果对方软件实力很差,自己做不了这个东西,外包给了一个暑期兼职的在读博士.学生嘛,只做过实验,没做过产品,给出的东 ...

  6. UVA 489-- Hangman Judge(暴力串处理)

     Hangman Judge  In ``Hangman Judge,'' you are to write a program that judges a series of Hangman gam ...

  7. 3-07. 求前缀表达式的值(25) (ZJU_PAT数学)

    题目链接:http://pat.zju.edu.cn/contests/ds/3-07 算术表达式有前缀表示法.中缀表示法和后缀表示法等形式.前缀表达式指二元运算符位于两个运算数之前,比如2+3*(7 ...

  8. openfire研究之部署连接管理器(connection manager)

    http://blog.sina.com.cn/s/blog_7325f5150101bafh.html 一. Openfire Connection Manager 简介 Openfire Conn ...

  9. 【网络协议】TCP的拥塞控制机制

    前言 计算机网络中的带宽.交换节点中的缓存和处理机等,都是网络的资源,在某段时间内,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏,这样的情况就叫做拥塞. 所谓拥塞控制,就 ...

  10. HTML5音乐可视化

    环境搭建 1,安装nodejs和Git,配置环境变量2,安装express,npm install -g express-generator3,创建项目,express -e music(项目名称)4 ...