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 ...
随机推荐
- Lucene的分词_中文分词器介绍
Paoding:庖丁解牛分词器.已经没有更新了. MMSeg:搜狗的词库. MMSeg分词器的一些截图: 步骤: 1.导入包 2.创建的时候使用MMSegAnalyzer分词器
- Leetcode 212.单词搜索II
单词搜索II 给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻&q ...
- codeforces 363B
#include<stdio.h> #include<string.h> #define inf 999999999 #define N 151000 int a[N],c[N ...
- hdu 1075 字典树
#include<stdio.h> #include<iostream> struct node { int num,i; node *a[27]; char s[20];// ...
- 解方程(codevs 3732)
题目描述 已知多项式方程: a0+a1x+a2x^2+..+anx^n=0 求这个方程在[1, m ] 内的整数解(n 和m 均为正整数) 输入输出格式 输入格式: 输入文件名为equation .i ...
- Redis 配置【十】
参考:http://www.runoob.com/redis/redis-conf.html Redis 的配置文件位于 Redis 安装目录下,文件名为 redis.conf. 你可以通过 CONF ...
- PatentTips - Hierarchical RAID system including multiple RAIDs
BACKGROUND OF THE INVENTION The present invention relates to a storage system offering large capacit ...
- 获取webview的截图
设置webview可以获取截图: webView.setDrawingCacheEnabled(true); 当要进行多次截图时,先要清除之前的缓存: webview.setDrawingCacheE ...
- nyoj_308_Substring_201405091611
Substring 时间限制:1000 ms | 内存限制:65535 KB 难度:1 描述 You are given a string input. You are to ...
- Layui选项卡、进度条、面板、徽章、时间线、辅助元素
Layui选项卡.进度条.面板.徽章.时间线.辅助元素 Tab选项卡 - 页面元素 导航菜单可应用于头部和侧边,Tab选项卡提供多套风格,支持响应式,支持删除选项卡等功能.面包屑结构简单,支持自 ...