一看到这道题觉得很水,打了递归树形DP后RE了一组,后来发现必须非递归(BFS)

递归版本84分:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int N,point[],next[],v[],c[],cnt=,f[];
bool p[];
long long sum=;
void insect(int x,int y,int z){next[cnt]=point[x];point[x]=cnt;v[cnt]=y;c[cnt]=z;cnt++;}
void dfs(int x)
{
int i;
f[x]=;
for (i=point[x];i!=-;i=next[i])
if (p[v[i]]==)
{
p[v[i]]=;
dfs(v[i]);
f[x]+=f[v[i]];
sum+=(1LL*c[i]*abs(*f[v[i]]-N));
}
}
int main()
{
int i,x,y,z;
memset(point,-,sizeof(point));
memset(next,-,sizeof(next));
memset(v,,sizeof(v));
memset(p,,sizeof(p));
memset(c,,sizeof(c));
memset(f,,sizeof());
scanf("%d\n",&N);
for (i=;i<N;++i)
{
scanf("%d %d %d\n",&x,&y,&z);
insect(x,y,z); insect(y,x,z);
}p[]=;dfs();
printf("%lld\n",sum);
return ;
}

BFS版本AC:

#include<queue>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int N,point[],next[],v[],c[],cnt=,f[],s[],fa[];
int table[],num=,du[];
bool p[];
long long sum=;
void insect(int x,int y,int z){next[cnt]=point[x];point[x]=cnt;v[cnt]=y;c[cnt]=z;cnt++;}
void dfs(int x)
{
int now,i,tmp=;
queue<int>q;
for (i=;i<=N;++i)
{
if (du[i]==)
q.push(i),f[i]=;
f[i]=;
}
while (!q.empty())
{
now=q.front(); q.pop(); p[now]=; tmp=now;
for (i=point[now];i!=-;i=next[i])
if (p[v[i]]==)
{
f[v[i]]+=f[now];
du[v[i]]--;
if (du[v[i]]==)
q.push(v[i]);
}
}
memset(p,,sizeof(p));
p[tmp]=; q.push(tmp);
while (!q.empty())
{
now=q.front(); q.pop();
for (i=point[now];i!=-;i=next[i])
if (p[v[i]]==)
{
p[v[i]]=;
sum+=(1LL*c[i]*abs(*f[v[i]]-N));
q.push(v[i]);
}
}
printf("%lld\n",sum);
}
int main()
{
int i,x,y,z;
memset(point,-,sizeof(point));
memset(next,-,sizeof(next));
memset(du,,sizeof(du));
memset(v,,sizeof(v));
memset(p,,sizeof(p));
memset(c,,sizeof(c));
memset(f,,sizeof());
scanf("%d\n",&N);
for (i=;i<N;++i)
{
scanf("%d %d %d\n",&x,&y,&z); du[x]++; du[y]++;
insect(x,y,z); insect(y,x,z);
}dfs();
return ;
}

BZOJ 2435 道路修建 NOI2011 树形DP的更多相关文章

  1. 【BZOJ】2435: [Noi2011]道路修建(树形dp)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2435 我怎么感觉那么水.. 坑的是,dfs会爆...好吧..用bfs.. //upd:我的智商也是醉 ...

  2. BZOJ2435 [Noi2011]道路修建 【树形Dp 吧。。】

    题目 在 W 星球上有 n 个国家.为了各自国家的经济发展,他们决定在各个国家 之间建设双向道路使得国家之间连通.但是每个国家的国王都很吝啬,他们只愿 意修建恰好 n – 1条双向道路. 每条道路的修 ...

  3. 【BZOJ-2435】道路修建 (树形DP?)DFS

    2435: [Noi2011]道路修建 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3115  Solved: 1002[Submit][Statu ...

  4. bzoj 2435 道路修建

    Written with StackEdit. Description 在 \(W\) 星球上有 \(n\) 个国家.为了各自国家的经济发展,他们决定在各个国家 之间建设双向道路使得国家之间连通.但是 ...

  5. bzoj 2435: [Noi2011]道路修建【树形dp】

    dp求size和deep,然后对每条边模拟求代价即可 #include<iostream> #include<cstdio> #include<algorithm> ...

  6. [BZOJ 4033] [HAOI2015] T1 【树形DP】

    题目链接:BZOJ - 4033 题目分析 使用树形DP,用 f[i][j] 表示在以 i 为根的子树,有 j 个黑点的最大权值. 这个权值指的是,这个子树内部的点对间距离的贡献,以及 i 和 Fat ...

  7. [BZOJ 4455] [ZJOI 2016] 小星星 (树形dp+容斥原理+状态压缩)

    [BZOJ 4455] [ZJOI 2016] 小星星 (树形dp+容斥原理+状态压缩) 题面 给出一棵树和一个图,点数均为n,问有多少种方法把树的节点标号,使得对于树上的任意两个节点u,v,若树上u ...

  8. BZOJ 2878: [Noi2012]迷失游乐园( 树形dp )

    一棵树的话直接树形dp(求出往下走和往上走的期望长度). 假如是环套树, 环上的每棵树自己做一遍树形dp, 然后暴力枚举(环上的点<=20)环上每个点跑经过环上的路径就OK了. -------- ...

  9. BZOJ 2286 消耗战 (虚树+树形DP)

    给出一个n节点的无向树,每条边都有一个边权,给出m个询问,每个询问询问ki个点,问切掉一些边后使得这些顶点无法与顶点1连接.最少的边权和是多少.(n<=250000,sigma(ki)<= ...

随机推荐

  1. 【MVC 4】7.SportsSore:完成购物车

    作者:[美]Adam Freeman      来源:<精通ASP.NET MVC 4> 本文将继续构建 SportsStore 示例应用程序.在上一章中,添加了对购物车的基本支持,现在打 ...

  2. 怎样用ZBrush雕刻人体造型

    之前我们通过学习使用ZBrush®中的Curves和Insert笔刷快速创建模型的躯干.四肢以及手指.经过老师耐心的讲解我们也收获了很多,知道了创建模型的流程和雕刻技巧.今天的ZBrush教程我们将结 ...

  3. CentOS7.2安装总结

    第一次自己写文章,想想还有点小激动呢.折腾了大半天,终于在一个没用的台式机上面装了个mini版的CentOS7.2.写这篇文章也是做个记载,要是以后再装要注意了. 一.安装过程 采用U盘安装.最初是准 ...

  4. Django中的syncdb命令

    从官方文档的意思来看,现在他已经成为migrate命令的同义词了,和migrate命令有相同的作用. Deprecated since version 1.7: This command has be ...

  5. WPF窗口阴影和夜间模式的实现

    窗口阴影 实现 因项目需要给用户一定提示,设计师建议在鼠标进入时显示窗口阴影,离开时取消窗口阴影. 很自然,都会想到直接在窗口的内容或者自定义窗口的最外层元素上加效果.示例如下: <Grid&g ...

  6. git rebase 介绍

    git rebase是对commit history的改写.当你要改写的commit history还没有被提交到远程repo的时候,也就是说,还没有与他人共享之前,commit history是你私 ...

  7. Android使用的Eclipse NDK开发较详细一篇文章

    转自: http://www.cnblogs.com/zdz8207/archive/2012/11/27/android-ndk-install.html

  8. android studio 中的编码问题

    在 Android studio 中直接创建项目和导入其他项目都会有一个文件编码设定的问题,在 android studio (version 1.2.0)中设置文件的编码,只需要两步: 1.打开Se ...

  9. page-cache层以及各种标志位之间的转换

    对真实文件系统层,算是懂了,但是vfs层以及block层还是有点生疏呢,最近要好好分析一下了. page-cache层主要关注文件读写时的行为,包括页的状态之间的变化,何时变脏,何时变成writeba ...

  10. 007医疗项目-模块一:用户的查找:3.用户表查询的Action和Service

    这里主要写Action和Service. 先写Service层: 架构如下: