一看到这道题觉得很水,打了递归树形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. 非ios系统是否还有出路?

    **@SoftwareTeacher**        这位老师提出的问题我很喜欢,所以单拿出一篇文章,认真的回复.        PS: 因学校网很差,所以现在才来回复哈,见谅.以下为正文     ...

  2. 怎么在ZBrush中渲染漫画风格的插画

    创建“漫画插画”的外观和感觉想必一定很有趣吧,但是,获得想要的精确外观有时也会令人相当沮丧,因此了解一些基本原则,创建类似于ZBrush漫画MatCaps的作品很有必要. 若有疑问亦或者想查看具体的视 ...

  3. Android的面孔_Actiyity

    一.什么是Activity? 简单的说:Activity就是布满整个窗口或者悬浮于其他窗口上的交互界面.在一个应用程序中通常由多个Activity构成,都会在Manifest.xml中指定一个主的Ac ...

  4. Ajax读取文件时出现的缓存问题

    对于Ajax缓存问题时,由于浏览器的版本问题,有时候当服务器端已更改文件中的内容,而客户端并得不到更新后的文件,而是延续之前的文件内容,解决办法是:在读取的文件内容后加一串的地址:JSON的格式为[{ ...

  5. 第11章 Windows线程池(3)_私有的线程池

    11.3 私有的线程池 11.3.1 创建和销毁私有的线程池 (1)进程默认线程池 当调用CreateThreadpoolwork.CreateThreadpoolTimer.CreateThread ...

  6. sql windows server2008 全套激活码

    vs2012 - Microsoft Visual Studio Ultimate 2012 旗舰版 有效注册密钥: YKCW6-BPFPF-BT8C9-7DCTH-QXGWC- Microsoft  ...

  7. 021医疗项目-模块二:药品目录的导入导出-介绍poi类

    我们使用的是.10版本 Apache POI - the Java API for Microsoft Documents,Apache POI 是用Java编写的免费开源的跨平台的 Java API ...

  8. ASP.net MVC自定义错误处理页面的方法

    在ASP.NET MVC中,我们可以使用HandleErrorAttribute特性来具体指定如何处理Action抛出的异常.只要某个Action设置了HandleErrorAttribute特性,那 ...

  9. python数字图像处理(5):图像的绘制

    实际上前面我们就已经用到了图像的绘制,如: io.imshow(img) 这一行代码的实质是利用matplotlib包对图片进行绘制,绘制成功后,返回一个matplotlib类型的数据.因此,我们也可 ...

  10. 20145215《Java程序设计》第8周学习总结

    20145215<Java程序设计>第八周学习总结 教材学习内容总结 NIO与NIO2 认识NIO NIO使用频道(Channel)来衔接数据节点,在处理数据时,NIO可以设定缓冲区(Bu ...