BZOJ 2435 道路修建 NOI2011 树形DP
一看到这道题觉得很水,打了递归树形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的更多相关文章
- 【BZOJ】2435: [Noi2011]道路修建(树形dp)
http://www.lydsy.com/JudgeOnline/problem.php?id=2435 我怎么感觉那么水.. 坑的是,dfs会爆...好吧..用bfs.. //upd:我的智商也是醉 ...
- BZOJ2435 [Noi2011]道路修建 【树形Dp 吧。。】
题目 在 W 星球上有 n 个国家.为了各自国家的经济发展,他们决定在各个国家 之间建设双向道路使得国家之间连通.但是每个国家的国王都很吝啬,他们只愿 意修建恰好 n – 1条双向道路. 每条道路的修 ...
- 【BZOJ-2435】道路修建 (树形DP?)DFS
2435: [Noi2011]道路修建 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3115 Solved: 1002[Submit][Statu ...
- bzoj 2435 道路修建
Written with StackEdit. Description 在 \(W\) 星球上有 \(n\) 个国家.为了各自国家的经济发展,他们决定在各个国家 之间建设双向道路使得国家之间连通.但是 ...
- bzoj 2435: [Noi2011]道路修建【树形dp】
dp求size和deep,然后对每条边模拟求代价即可 #include<iostream> #include<cstdio> #include<algorithm> ...
- [BZOJ 4033] [HAOI2015] T1 【树形DP】
题目链接:BZOJ - 4033 题目分析 使用树形DP,用 f[i][j] 表示在以 i 为根的子树,有 j 个黑点的最大权值. 这个权值指的是,这个子树内部的点对间距离的贡献,以及 i 和 Fat ...
- [BZOJ 4455] [ZJOI 2016] 小星星 (树形dp+容斥原理+状态压缩)
[BZOJ 4455] [ZJOI 2016] 小星星 (树形dp+容斥原理+状态压缩) 题面 给出一棵树和一个图,点数均为n,问有多少种方法把树的节点标号,使得对于树上的任意两个节点u,v,若树上u ...
- BZOJ 2878: [Noi2012]迷失游乐园( 树形dp )
一棵树的话直接树形dp(求出往下走和往上走的期望长度). 假如是环套树, 环上的每棵树自己做一遍树形dp, 然后暴力枚举(环上的点<=20)环上每个点跑经过环上的路径就OK了. -------- ...
- BZOJ 2286 消耗战 (虚树+树形DP)
给出一个n节点的无向树,每条边都有一个边权,给出m个询问,每个询问询问ki个点,问切掉一些边后使得这些顶点无法与顶点1连接.最少的边权和是多少.(n<=250000,sigma(ki)<= ...
随机推荐
- 深搜+DP剪枝 codevs 1047 邮票面值设计
codevs 1047 邮票面值设计 1999年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description ...
- 边工作边刷题:70天一遍leetcode: day 82-1
Closest Binary Search Tree Value II 要点:通过iterator,把closest值附近的k个closest找到,从而time降为O(klgn) in order i ...
- Head First HTML5 Programming 读书笔记
1:HTML5引入了简单化的标记,新的语义和媒体元素,另外要依赖于一组支持web应用的js库. 2:关于js 对象是属性的结合 window对象是全局变量. document对象是window的一个属 ...
- table标签去除默认边框
table去除默认边框 1.在没有出去默认边框时,改变底部颜色,依然显示1px左右的白色边框 2.为table 加上 border="0" cellpadding="0& ...
- 09Spring_AOP介绍和java本身的动态代理以及cglib代理
Aspect Oriented Programming 面向切面编程 1. 业界 AOP 实际上 OOP (面向对象编程 ) 延伸 ---- OOP编程语言. AOP设计思想,下面给出一张AOP的设 ...
- 第五章 使用 Bootstrap Typeahead 组件(百度下拉效果)
推荐链接:http://www.cnblogs.com/haogj/p/3376874.html UnderScore官网:http://underscorejs.org/ 参考文档:http://w ...
- sqlSQL2008如何创建定时作业(代理服务)(转)
SQL2008如何创建定时作业?此方法也适应于Sql Server2005数据库,有兴趣的可以来看下! 1.打开[SQL Server Management Studio],在[对象资源管理器]列表中 ...
- HTTPS实现原理
HTTPS实现原理 HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版 ...
- C语言 百炼成钢4
//题目10:打印楼梯,同时在楼梯上方打印两个笑脸. #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdli ...
- 如何拿到半数面试公司Offer——我的Python求职之路(转)
原文出处:http://www.cnblogs.com/Lands-ljk/p/5836492.html 从八月底开始找工作,短短的一星期多一些,面试了9家公司,拿到5份Offer,可能是因为我所面试 ...