一看到这道题觉得很水,打了递归树形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 Orientation, 想怎么转就怎么转~~~

    此博文主要针对IOS应用, 是屏幕旋转相关问题的一个总结. 主要内容有: IOS5,6,7不同版的适配. 强制旋转和自动旋转. 博客: http://www.cnblogs.com/jhzhu 邮箱: ...

  2. POJ 1836 Alignment --LIS&LDS

    题意:n个士兵站成一排,求去掉最少的人数,使剩下的这排士兵的身高形成“峰形”分布,即求前面部分的LIS加上后面部分的LDS的最大值. 做法:分别求出LIS和LDS,枚举中点,求LIS+LDS的最大值. ...

  3. 给定一个整数实现奇偶bit位互换

    1.分别取出所有奇数bit位和偶数bit位 0x55555555(对应二进制奇数bit位为1,偶数bit位全为0)&num 0xaaaaaaaa(对应二进制即偶数bit位为1,奇数bit位全为 ...

  4. java10-3 equals方法

    public boolean equals(Object obj):指示其他某个对象是否与此对象“相等”.   该方法,默认情况下比较的是地址值.但是,如果只是比较地址值的话,一般来说意义不大,所以要 ...

  5. 报错"the geometry has no Z values"处理

    );  //将Z值设置为0 //IPoint point = (IPoint)pGeo; //point.Z = 0; } else            {                IZAwa ...

  6. 【C#】IDispose接口的应用

    .net的GC机制有两个问题: 一.GC并不能释放所有资源,它更不能释放非托管资源. 二.GC也不是实时的,所有GC存在不确定性.所以需要使用析构函数,但是为了不重复GC,需要做一些处理. publi ...

  7. Delphi7下SuperObject的JSON使用方法

    uses superobject; procedure TForm1.FormCreate(Sender: TObject); var aJson: ISuperObject; aSuperArray ...

  8. 装系统提示缺少所需的CD/DVD驱动器设备驱动程序

    昨晚用ultraISO和win7 旗舰版(ultimate)的镜像做了个启动U盘,插在自己新电脑上安装过程中提示“缺少所需的CD/DVD驱动器设备驱动程序”,用网上的很多办法都不行,最后找官网的客服问 ...

  9. php基础24:数组range

    <?php $numbers = range(1, 10); echo "<pre>"; var_dump($numbers); echo "</ ...

  10. PHP基础12:数组

    <?php //1.实例 $array = array("VOLVO","BMW","SASS"); for ($i=0; $i &l ...