Power Station POJ 4045
题意:给你一棵树,让你求一点,使该点到其余各点的距离之和最小。如果这样的点有多个,则按升序依次输出。
树型dp
#include <cstdio> #include <cstring> #include <vector> #include <set> using namespace std; const int maxn=50010; typedef __int64 LL; vector<int>tree[maxn];// to save the relation LL f[maxn],g[maxn],dp[maxn];//f[u] u as root to all his sons' distance g[u]the number of u'sons set<int> myqueue; void dfs(int u,int pa){ /* 以1为根,所有的子树到他们的子节点的和 */ if(tree[u].size() == 1 && u != 1){ g[u]=1; f[u]=0; return; } for(int v=0;v < tree[u].size();v++){ if(tree[u][v]!=pa){ dfs(tree[u][v],u); g[u]+=g[tree[u][v]];//the son's sons' number f[u]+=f[tree[u][v]]+g[tree[u][v]]; } } g[u]++;// himself } void dfs2(int u,int pa){// to sum the way from his father //再考虑从父节点来的 if(tree[u].size()==1 && u!=1){ dp[u]=dp[pa]+g[1]-(g[u]<<1); return; } for(int v=0;v<tree[u].size();v++){ if(tree[u][v]!= pa){ //到某节点的距离的和=该节点子树的距离和(在dfs1中获得)+从父亲那一支子树获得的和(此时,父节点那一支看成子树)。dp[儿子]=dp[父节点]-dp[儿子]-g[儿子](儿子到父节点这条路被减了子树的子节点数的次数) + dp[儿子]+(g[1]-g[儿子])(父树上的所有节点) dp[tree[u][v]]=dp[u]+g[1]-(g[tree[u][v]]<<1); dfs2(tree[u][v],u);//先算了之后再跑子树 } } } int main(){ int t; int n,I,R,a,b; scanf("%d",&t); LL mmin; while(t--){ scanf("%d%d%d",&n,&I,&R); for(int i=0;i<=n;i++){ tree[i].clear(); } for(int i=2;i<=n;i++){ scanf("%d%d",&a,&b); tree[a].push_back(b); tree[b].push_back(a); } // for(int i=0;i<=n;i++){ // for(int j=0;j<tree[i].size();j++){ // printf("%d ",tree[i][j]); // } // printf("\n"); // } memset(f,0,sizeof(f)); memset(g,0,sizeof(g)); dfs(1,-1); dp[1]=f[1]; dfs2(1,-1); mmin=dp[1]; myqueue.clear(); myqueue.insert(1); for(int i=2;i<=n;i++){ if(dp[i]<mmin){ mmin=dp[i]; myqueue.clear(); myqueue.insert(i); } if(dp[i]==mmin) myqueue.insert(i); } //warning : output long long should be I64d printf("%I64d\n",I*I*R*mmin);//use set not num but the op for(set<int>::iterator it=myqueue.begin();it!=myqueue.end();++it){ printf("%d ",*it); } printf("\n\n"); } }
Power Station POJ 4045的更多相关文章
- Power Network (poj 1459 网络流)
Language: Default Power Network Time Limit: 2000MS Memory Limit: 32768K Total Submissions: 23407 ...
- Power Network - poj 1459 (最大流 Edmonds-Karp算法)
Time Limit: 2000MS Memory Limit: 32768K Total Submissions: 24788 Accepted: 12922 Description A ...
- Building a Space Station POJ - 2031
Building a Space Station POJ - 2031 You are a member of the space station engineering team, and are ...
- Power Strings POJ - 2406
Power Strings POJ - 2406 时限: 3000MS 内存: 65536KB 64位IO格式: %I64d & %I64u 提交 状态 已开启划词翻译 问题描述 Gi ...
- poj - 4045 - Power Station
题意:一棵有n个结点的树,要取其中的一个结点,使得该结点到其他所有结点的距离和dis最小,即损耗I * I * R * dis最小,输出最小损耗和该结点(有多个的话按结点编号从小到大输出)(3 < ...
- ( KMP 求循环节的个数)Power Strings -- poj -- 2406
链接: http://poj.org/problem?id=2406 Power Strings Time Limit:3000MS Memory Limit:65536KB 64bi ...
- (最小生成树) Building a Space Station -- POJ -- 2031
链接: http://poj.org/problem?id=2031 Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 6011 ...
- Building a Space Station POJ 2031 【最小生成树 prim】
http://poj.org/problem?id=2031 Description You are a member of the space station engineering team, a ...
- Power Strings (poj 2406 KMP)
Language: Default Power Strings Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 33205 ...
随机推荐
- linux之gdb使用
gdb是linux下用来调试的一款软件,在这里,我只记录平常经常会用到的知识点,用到什么,就记录什么,在调试环境中去熟悉调试方法和调试工具,这才会加深理解. gdb能够做什么?它可以按照你的定义,随心 ...
- xamarin android——数据绑定到控件(四)
本文为通过自定义列表适配器定义ListView,以上文为基础,基于ListActivity. 定义列表项布局,包含一个图片显示,标题和描述 <LinearLayout xmlns:android ...
- linux环境下配置github远程仓库
1.设置git用户和邮箱 git config --global user.name "fujinzhou" git config --global user.email &quo ...
- vi 技巧
:%s/^/\// 行首加 / :%s/$/\// 行尾加/ :%s/^\///g 行首减 / :%s/\/$//g 行尾减/ :%s/^\s*//g 行首减 空格
- PHP 魔术方法 __isset __unset (三)
慢慢长寻夜,明月高空挂 __isset() - 在对类中属性或者非类中属性使用isset()方法的时候如果没有或者非公有属性,则自动执行__isset()的方法 __unset() - 在对类中属性 ...
- 【Winform】 无法将类型为“System.Windows.Forms.SplitContainer”的对象强制转换为类型“System.ComponentModel.ISupportInitialize”。
问题:将dotnet framework 4.0 切换到2.0时,编译没有问题,在运行时出现如下错误:System.InvalidCastException: 无法将类型为“System.Window ...
- mac OS X下PhpStorm+MAMP PRO+Xdebug+FireFox集成开发和断点调试环境配置
一.环境及软件 1.macbook pro 2.Phpstorm 3.MAMP PRO 4.FireFox 二.环境搭建 1.PhpStorm导入项目 下载PhpStorm并安装,网上随便找个注册码即 ...
- php入门变量之数字
在介绍变量时,我明确指出PHP具有整型和浮点型(小数)数字类型.但是,依据我的经验,这两种类型都可以归类到一般的数字之下(在极大程度上是这样的). 下面列举下PHP中有效的数字类型的变量: 8 3.1 ...
- php入门变量之字符串
字符串只是一块用引号括起来的字符:字母.数字.空格.标点符号,等等. 下面列出的全都是字符串: 'Huige' "In watermelon sugar" '100' 'Augus ...
- Pandas之容易让人混淆的行选择和列选择
在刚学Pandas时,行选择和列选择非常容易混淆,在这里进行一下讨论和归纳 本文的数据来源:https://github.com/fivethirtyeight/data/tree/master/fa ...