codehunter 「Adera 6」杯省选模拟赛 网络升级 【树形dp】
直接抄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】的更多相关文章
- 4.9 省选模拟赛 圆圈游戏 树形dp set优化建图
由于圆不存在相交的关系 所以包容关系形成了树的形态 其实是一个森林 不过加一个0点 就变成了树. 考虑对于每个圆都求出最近的包容它的点 即他的父亲.然后树形dp即可.暴力建图n^2. const in ...
- Contest Hunter Round #70 - 连续两大交易事件杯省选模拟赛
orz lydrainbowcat [Problem A]「艦これ市」70万幕后交易事件 排序机器=-=.重要的是相同的处理. 我们可以从小到大添加数字,然后维护一个位置的序列.每一种相等的数字都在一 ...
- 「HGOI#2019.4.19省选模拟赛」赛后总结
t1-Painting 这道题目比较简单,但是我比较弱就只是写了一个链表合并和区间DP. 别人的贪心吊打我的DP,嘤嘤嘤. #include <bits/stdc++.h> #define ...
- Violet 6 杯省选模拟赛 蒲公英
https://www.luogu.com.cn/problem/P4168 题目 给$n$个数字,有$m$次询问,问$a_l, a_{l+1} , \dots , a_r$的众数是什么, $1\le ...
- 省选模拟赛 4.26 T1 dp 线段树优化dp
LINK:T1 算是一道中档题 考试的时候脑残了 不仅没写优化 连暴力都打挂了. 容易发现一个性质 那就是同一格子不会被两种以上的颜色染.(颜色就三种. 通过这个性质就可以进行dp了.先按照左端点排序 ...
- 5.29 省选模拟赛 树的染色 dp 最优性优化
LINK:树的染色 考场上以为这道题要爆蛋了 没想到 推出正解来了. 反正是先写了爆搜的 爆搜最近越写越熟练了 容易想到dp 容易设出状态 f[i][j]表示以i为根的子树内白色的值为j此时黑色的值怎 ...
- 5.15 省选模拟赛 容斥 生成函数 dp
LINK:5.15 T2 个人感觉生成函数更无脑 容斥也好推的样子. 容易想到每次放数和数字的集合无关 所以得到一个dp f[i][j]表示前i个数字 逆序对为j的方案数. 容易得到转移 使用前缀和优 ...
- 4.26 省选模拟赛 T3 状压dp 差分求答案
LINK:T3 比较好的题目 考试的时候被毒瘤的T2给搞的心态爆炸 这道题连正解的思路都没有想到. 一看到题求删除点的最少个 可以使得不连通. 瞬间想到最小割 发现对于10分直接跑最小割即可. 不过想 ...
- 4.2 省选模拟赛 流浪者 容斥dp
求出期望 所有情况很好搞 C(n+m-2,n-1). 也就是说求出所有情况的和乘以上面总方案的逆元即可. 可以发现所有情况和经过多少个障碍点有关 和所处位置无关. 简单的设f[i]表示从1,1到n,m ...
随机推荐
- fielddata breaker与cache size
breaker的估算,是根据语句以及上层的结果数,加上固定的值,不准确. cache.size是cache到结果的size,准确. 所以,配置breaker不能拦截占用内存的聚合查询,而配置cache ...
- BNUOJ 1268 PIGS
PIGS Time Limit: 1000ms Memory Limit: 10000KB This problem will be judged on PKU. Original ID: 11496 ...
- 九度oj 题目1490:字符串链接
题目1490:字符串链接 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:2610 解决:1321 题目描述: 不用strcat 函数,自己编写一个字符串链接函数MyStrcat(char ...
- Flask(2):登陆验证
装饰器补充: import functools def auth(func): @functools.wraps(func) # 作用:把原函数的原信息封装到 inner 中 def inner(*a ...
- SOJ 2930_积木城堡
[题意]若干个城堡,给定每个城堡的积木数及每块积木的棱长.从城堡中抽出积木使每块城堡高度相同,求最大高度 [分析]城堡的积木选择可以看成01背包问题,从最矮的城堡高度开始依次递减,求出使每个背包都能装 ...
- 关于SQL命令中不等号(!=,<>)
比较两个表达式(比较运算符).当比较非空表达式时,如果左边操作数的数值不等于右边的操作数,则结果为 TRUE:否则结果为 FALSE.如果两个操作数中有一个或者两个都为 NULL,并且 SET ANS ...
- CentOS6 设置AliNetflow 环境
CentOS6 设置AliNetflow 环境 Install OS 这一步略过. 只要保证操作系统是CentOS6.4 并且网络通畅 Install Python2.7.8 设置YUM 我的网络环境 ...
- 【CV论文阅读】生成式对抗网络GAN
生成式对抗网络GAN 1. 基本GAN 在论文<Generative Adversarial Nets>提出的GAN是最原始的框架,可以看成极大极小博弈的过程,因此称为“对抗网络”.一般 ...
- nodejs连接sqlserver
nodejs连接sqlserver http://blog.csdn.net/kkkkkxiaofei/article/details/31353091
- owncloud
owncloud https://dl.iuscommunity.org/pub/ius/stable/CentOS/6/x86_64/ [root@n1 ~]# rpm -Uvh ius-relea ...