直接抄ppt好了……来自lyd



注意只用对根判断是否哟留下儿子

#include<iostream>
#include<cstdio>
using namespace std;
const int N=100005;
long long n,ans,h[N],cnt,fa[N],dis[N],d1,d2,l1,l2,c1,at[N],bt[N],a[N],b[N],tota,totb,nw,tmp,g[N];
bool del[N];
struct qwe
{
long long ne,to,va,c;
}e[N<<1];
long long read()
{
long long r=0,f=1;
char p=getchar();
while(p>'9'||p<'0')
{
if(p=='-')
f=-1;
p=getchar();
}
while(p>='0'&&p<='9')
{
r=r*10+p-48;
p=getchar();
}
return r*f;
}
void add(long long u,long long v,long long w,long long c)
{
cnt++;
e[cnt].ne=h[u];
e[cnt].to=v;
e[cnt].va=w;
e[cnt].c=c;
h[u]=cnt;
}
void dfs(long long u,long long fat)
{
fa[u]=fat;
for(int i=h[u];i;i=e[i].ne)
if(e[i].to!=fat)
{
dis[e[i].to]=dis[u]+e[i].va;
dfs(e[i].to,u);
}
}
void dfs1(long long u,long long fat)
{
fa[u]=fat;
for(int i=h[u];i;i=e[i].ne)
if(e[i].to!=fat)
{
dfs1(e[i].to,u);
dis[u]=max(dis[u],dis[e[i].to]+e[i].va);
}
}
long long dp(long long u,long long ti)
{
for(int i=h[u];i;i=e[i].ne)
if(e[i].to!=fa[u]&&dis[e[i].to]+e[i].va==dis[u])
g[u]+=dp(e[i].to,e[i].c);
if(!g[u])
return ti;
return min(ti,g[u]);
}
int main()
{
n=read();
for(int i=1;i<n;i++)
{
long long x=read(),y=read(),z=read(),c=read();
add(x,y,z,c),add(y,x,z,c);
}
dfs(1,0);
for(int i=1;i<=n;i++)
if(dis[i]>dis[d1])
d1=i;
fa[d1]=0,dis[d1]=0;
dfs(d1,0);
for(int i=1;i<=n;i++)
if(dis[i]>dis[d2])
d2=i;
for(int i=d2;i;i=fa[i])
if((dis[fa[i]]<<1)<dis[d2]&&(dis[i]<<1)>=dis[d2])
d1=i;
l1=dis[d1],l2=dis[d2]-dis[d1];
for(int i=1;i<=n;i++)
dis[i]=0;
fa[d1]=0;
dfs1(d1,0);
for(int i=h[d1];i;i=e[i].ne)
{
if(dis[e[i].to]+e[i].va==l1)
a[++tota]=e[i].to,at[tota]=e[i].c;
else if(dis[e[i].to]+e[i].va==l2)
b[++totb]=e[i].to,bt[totb]=e[i].c;
}
for(int i=1;i<=tota;i++)
{
nw=dp(a[i],at[i]);
ans+=nw;
if(nw>tmp)
tmp=nw;
}
nw=0;
for(int i=1;i<=n;i++)
nw+=dp(b[i],bt[i]);
if(l2&&nw<tmp)
ans=ans-tmp+nw;
printf("%lld\n",ans);
return 0;
}

codehunter 「Adera 6」杯省选模拟赛 网络升级 【树形dp】的更多相关文章

  1. 4.9 省选模拟赛 圆圈游戏 树形dp set优化建图

    由于圆不存在相交的关系 所以包容关系形成了树的形态 其实是一个森林 不过加一个0点 就变成了树. 考虑对于每个圆都求出最近的包容它的点 即他的父亲.然后树形dp即可.暴力建图n^2. const in ...

  2. Contest Hunter Round #70 - 连续两大交易事件杯省选模拟赛

    orz lydrainbowcat [Problem A]「艦これ市」70万幕后交易事件 排序机器=-=.重要的是相同的处理. 我们可以从小到大添加数字,然后维护一个位置的序列.每一种相等的数字都在一 ...

  3. 「HGOI#2019.4.19省选模拟赛」赛后总结

    t1-Painting 这道题目比较简单,但是我比较弱就只是写了一个链表合并和区间DP. 别人的贪心吊打我的DP,嘤嘤嘤. #include <bits/stdc++.h> #define ...

  4. Violet 6 杯省选模拟赛 蒲公英

    https://www.luogu.com.cn/problem/P4168 题目 给$n$个数字,有$m$次询问,问$a_l, a_{l+1} , \dots , a_r$的众数是什么, $1\le ...

  5. 省选模拟赛 4.26 T1 dp 线段树优化dp

    LINK:T1 算是一道中档题 考试的时候脑残了 不仅没写优化 连暴力都打挂了. 容易发现一个性质 那就是同一格子不会被两种以上的颜色染.(颜色就三种. 通过这个性质就可以进行dp了.先按照左端点排序 ...

  6. 5.29 省选模拟赛 树的染色 dp 最优性优化

    LINK:树的染色 考场上以为这道题要爆蛋了 没想到 推出正解来了. 反正是先写了爆搜的 爆搜最近越写越熟练了 容易想到dp 容易设出状态 f[i][j]表示以i为根的子树内白色的值为j此时黑色的值怎 ...

  7. 5.15 省选模拟赛 容斥 生成函数 dp

    LINK:5.15 T2 个人感觉生成函数更无脑 容斥也好推的样子. 容易想到每次放数和数字的集合无关 所以得到一个dp f[i][j]表示前i个数字 逆序对为j的方案数. 容易得到转移 使用前缀和优 ...

  8. 4.26 省选模拟赛 T3 状压dp 差分求答案

    LINK:T3 比较好的题目 考试的时候被毒瘤的T2给搞的心态爆炸 这道题连正解的思路都没有想到. 一看到题求删除点的最少个 可以使得不连通. 瞬间想到最小割 发现对于10分直接跑最小割即可. 不过想 ...

  9. 4.2 省选模拟赛 流浪者 容斥dp

    求出期望 所有情况很好搞 C(n+m-2,n-1). 也就是说求出所有情况的和乘以上面总方案的逆元即可. 可以发现所有情况和经过多少个障碍点有关 和所处位置无关. 简单的设f[i]表示从1,1到n,m ...

随机推荐

  1. Windows学习总结(11)——Windows批处理命令编写代码及小程序简介

    批处理(Batch)也称为批处理脚本.顾名思义,就是对某对象进行批量的处理.DOS批处理是基于DOS命令,用来自动地批量地执行DOS命令以实现特定操作的脚本.批处理是一种简化的脚本语言,它应用于DOS ...

  2. Qt笔记——添加菜单图片/添加资源文件

    添加新文件,模板选择Qt分类中的Qt资源文件(Qt Resource File) 先添加前缀,点击"添加"按钮,然后选择"添加前缀",我们这里因为要添加图片,所 ...

  3. 全文搜索(A-4)-推荐系统架构

    推荐系统向用户推荐物品有三种情况. 推荐和用户已表示喜欢的物品相似的物品. 推荐和用户有相似偏好的用户喜欢的物品. 推荐包含用户偏好特征的物品.

  4. hihoCoder#1062 最近公共祖先·

    原题地址 A和A的共同祖先是A,即使A没有在之前的家谱中出现过!被这个坑了,WA了很久... 比如:小头爸爸是大头儿子他爹,问:隔壁王叔叔和隔壁王叔叔的最近祖先是谁?,答:隔壁王叔叔. 代码: #in ...

  5. 567. Permutation in String

    Problem statement: Given two strings s1 and s2, write a function to return true if s2 contains the p ...

  6. 爬虫(1):requests模块

    requests介绍: reqeusts模块:python原生一个基于网络请求的模块,模拟浏览器发起请求. requests模块的优点: - 1.自动处理url编码 - 2.自动处理post请求的参数 ...

  7. POJ 2104 K-th Number (可持久化线段树)

    题目大意 给一个长度为n的序列,有m个询问,每次询问一个区间里面第k小的数. 解题分析 静态的区间第k大.复习了一下可持久化线段树. 首先对数值离散化,建一颗权值线段树.按照序列的顺序依次插入,每一个 ...

  8. Ubuntu 16.04安装基于nethogs衍生的网络监控软件(应用实时网速监控)

    基于nethogs衍生的网络监控软件有如下所列举的: nettop显示数据包类型,按数据包的大小或数量排序. ettercap是以太网的网络嗅探器/拦截器/记录器 darkstat通过主机,协议等方式 ...

  9. Oracle 设置用户密码永不过期

    --1.查看用户的proifle,一般是default select username,profile from dba_users; --2.查看概要文件(default)的密码有效期设置 sele ...

  10. 图片在 canvas 中的 选中/平移/缩放/旋转,包含了所有canvas的2D变化,让你认识到数学的重要性

    1.介绍 canvas 已经出来好久了,相信大家多少都有接触. 如果你是前端页面开发/移动开发,那么你肯定会有做过图片上传处理,图片优化,以及图片合成,这些都是可以用 canvas 实现的. 如果你是 ...