codeforces 61D Eternal Victory 树形DP
来源:互联网 发布:mysql开启日志功能 编辑:程序博客网 时间:2024/04/30 12:10
题意:以一棵树的1节点为起点,某点为终点,遍历所有节点。选择适当的终点求出最短的旅游距离。
做法:基本的树形DP,求出每颗子树所有边的和,模拟一下,就可以得出f(u)=f(father)-2*sum[u]-2*line(u,v)+line(u,v)+sum[u]*2;
当然,父节点是0的时候着重考虑一下。
#include <iostream>#include <map>#include <vector>#include <utility>#include <cstdio>#define LMT 100003#define LL long long//单点的时候啊,ans输出不可为-1!!using namespace std;LL sum[LMT],tem[LMT],ans;map<pair<int,int>,LL>line;vector<int>gra[LMT];void inidfs(int u,int pri){ for(size_t i=0;i<gra[u].size();i++) if(gra[u][i]!=pri) { int v=gra[u][i];inidfs(v,u); sum[u]+=line[make_pair(u,v)]+sum[v]; }}void dfs(int u,int pri){ if(pri!=-1) { LL add; if(pri!=1)add=tem[pri]-2*sum[u]-2*line[make_pair(pri,u)]; else add=2*(sum[pri]-sum[u]-line[make_pair(pri,u)]); tem[u]=add+line[make_pair(pri,u)]+sum[u]*2; if(ans==-1||ans>tem[u])ans=tem[u]; } for(size_t i=0;i<gra[u].size();i++) if(gra[u][i]!=pri) { int v=gra[u][i]; dfs(v,u); }}int main(){ int n,u,v; LL w; scanf("%d",&n);ans=-1; for(int i=1;i<n;i++) { scanf("%d%d%I64d",&u,&v,&w); line[make_pair(u,v)]=w; line[make_pair(v,u)]=w; gra[u].push_back(v); gra[v].push_back(u); } inidfs(1,-1); tem[1]=sum[1]; dfs(1,-1); ans=ans<0?0:ans; printf("%I64d\n",ans); return 0;}
- codeforces 61D Eternal Victory 树形DP
- Codeforces 61D. Eternal Victory 树的性质
- Codeforces Beta Round #57 (Div. 2) D. Eternal Victory
- Codeforces 61D--树形dp
- Codeforces 161D 树形DP
- codeforces-743D-树形dp
- Codeforces 743D 树形dp
- codeforces 219D 【树形DP】
- CodeForces 219D 树形DP
- codeforces 500d 树形dp和概率
- 【codeforces】543D. Road Improvement【树形DP】
- Codeforces 543D Road Improvement 树形dp
- Road Improvement - CodeForces 543 D 树形dp
- codeforces 543d Road Improvement 树形dp
- CodeForces 101D Castle(树形dp)
- Codeforces 543 D Road Improvement 树形dp
- Codeforces 337D 树形dp + 小技巧
- codeforces 543D D. Road Improvement(树形dp)
- gamma
- 2013年关于Linux的5大猜想
- GPRS开发系列文章之入门篇
- How to Compile Android on Ubuntu (12.04)
- Valve创始人再喷Win 8:它伤害了PC行业的每一个人
- codeforces 61D Eternal Victory 树形DP
- Win 8狂想 走自己的路让别的系统无路可走?
- 枚举(Enum)中的values()方法揭秘
- 炫酷Win 8十大令人抓狂恶作剧
- Android:XML处理比较(SAX/Pull/DOM)
- IT经理如何看待Win 8
- GPRS开发系列文章之进阶篇
- cocos2d-x之物理引擎box2d(1)
- Linux中pushd和popd用法