2019CCPC-江西省赛 -A Cotree (树形DP,求树上一点到其他点的距离之和)


我是傻逼我是傻逼
#include<bits/stdc++.h>
using namespace std;
const int maxn=4e5+50;
typedef long long ll;
const ll mod=998244353;
int Laxt[maxn],Next[maxn],To[maxn],cnt;
void add(int u,int v){
Next[++cnt]=Laxt[u];
Laxt[u]=cnt;
To[cnt]=v;
Next[++cnt]=Laxt[v];
Laxt[v]=cnt;
To[cnt]=u;
}
ll dp[maxn],sz[maxn];
int vis[maxn];
void dfs(int u,int p){
sz[u]=1;vis[u]=1;
for(int i=Laxt[u];i;i=Next[i]){
int v=To[i];
if(v==p)continue;
dfs(v,u);
sz[u]+=sz[v];
dp[u]+=dp[v]+sz[v];
}
}
ll mi[5],id[5];
void dfs1(int u,int pre,int o){
if(mi[o]>dp[u]){
mi[o]=dp[u];id[o]=u;
}
// cout<<"u="<<u<<" "<<"dp[u]="<<dp[u]<<endl;
for(int i=Laxt[u];i;i=Next[i]){
int v=To[i];
if(v==pre)continue;
dp[u]-=dp[v]+sz[v];
sz[u]-=sz[v];
dp[v]+=dp[u]+sz[u];
sz[v]+=sz[u];
dfs1(v,u,o);
sz[v]-=sz[u];
dp[v]-=dp[u]+sz[u];
sz[u]+=sz[v];
dp[u]+=dp[v]+sz[v];
}
}
ll sum=0;
void dfs2(int u,int pre){
sum+=dp[u];
// cout<<"u="<<u<<" "<<dp[u]<<endl;
for(int i=Laxt[u];i;i=Next[i]){
int v=To[i];
if(v==pre)continue;
dp[u]-=dp[v]+sz[v];
sz[u]-=sz[v];
dp[v]+=dp[u]+sz[u];
sz[v]+=sz[u];
dfs2(v,u);
sz[v]-=sz[u];
dp[v]-=dp[u]+sz[u];
sz[u]+=sz[v];
dp[u]+=dp[v]+sz[v];
}
}
int main(){
std::ios::sync_with_stdio(false);
int n;
cin>>n;
for(int i=1;i<=n-2;i++){
int u,v;
cin>>u>>v;
add(u,v);
}
int tot=0;
for(int i=0;i<4;i++)mi[i]=1e18;
for(int i=1;i<=n;i++){
if(!vis[i]){
dfs(i,0);
/* for(int i=1;i<=n;i++){
cout<<"i="<<i<<" "<<dp[i]<<" "<<sz[i]<<endl;
}*/
dfs1(i,0,++tot);
}
}
add(id[1],id[2]);
memset(dp,0,sizeof(dp));
memset(sz,0,sizeof(sz));
dfs(1,0);
dfs2(1,0);
cout<<sum/2<<endl;
return 0;
}
2019CCPC-江西省赛 -A Cotree (树形DP,求树上一点到其他点的距离之和)的更多相关文章
- hdu6446 网络赛 Tree and Permutation(树形dp求任意两点距离之和)题解
题意:有一棵n个点的树,点之间用无向边相连.现把这棵树对应一个序列,这个序列任意两点的距离为这两点在树上的距离,显然,这样的序列有n!个,加入这是第i个序列,那么这个序列所提供的贡献值为:第一个点到其 ...
- HDU 4514 - 湫湫系列故事——设计风景线 - [并查集判无向图环][树形DP求树的直径]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4514 Time Limit: 6000/3000 MS (Java/Others) Memory Li ...
- 浅谈关于树形dp求树的直径问题
在一个有n个节点,n-1条无向边的无向图中,求图中最远两个节点的距离,那么将这个图看做一棵无根树,要求的即是树的直径. 求树的直径主要有两种方法:树形dp和两次bfs/dfs,因为我太菜了不会写后者这 ...
- 树形dp - 求树的直径
随着杭州西湖的知名度的进一步提升,园林规划专家湫湫希望设计出一条新的经典观光线路,根据老板马小腾的指示,新的风景线最好能建成环形,如果没有条件建成环形,那就建的越长越好. 现在已经勘探确定了n个位置可 ...
- 2017 Wuhan University Programming Contest (Online Round) B Color 树形dp求染色方法数
/** 题目:Color 链接:https://oj.ejq.me/problem/23 题意:给定一颗树,将树上的点最多染成m种颜色,有些节点不可以染成某些颜色.相邻节点颜色不同.求染色方法数. 思 ...
- HDU - 3899 JLUCPC(树形dp求距离和)
JLUCPC Dr. Skywind and Dr. Walkoncloud are planning to hold the annual JLU Collegiate Programming Co ...
- 4.9 省选模拟赛 圆圈游戏 树形dp set优化建图
由于圆不存在相交的关系 所以包容关系形成了树的形态 其实是一个森林 不过加一个0点 就变成了树. 考虑对于每个圆都求出最近的包容它的点 即他的父亲.然后树形dp即可.暴力建图n^2. const in ...
- 树形DP求树的重心 --SGU 134
令一个点的属性值为:去除这个点以及与这个点相连的所有边后得到的连通分量的节点数的最大值. 则树的重心定义为:一个点,这个点的属性值在所有点中是最小的. SGU 134 即要找出所有的重心,并且找出重心 ...
- CSP模拟赛 Repulsed(树形DP)
题面 ⼩ w ⼼⾥的⽕焰就要被熄灭了. 简便起⻅,假设⼩ w 的内⼼是⼀棵 n − 1 条边,n 个节点的树. 现在你要在每个节点⾥放⼀些个灭⽕器,每个节点可以放任意多个. 接下来每个节点都要被分配给 ...
随机推荐
- fflush函数
/*** flush.c ***/ #include<stdio.h> #include<string.h> #include<stdlib.h> int main ...
- Tishreen-CPC 2018 G. Colors Overflow(分块)
Problem G. Colors Overflow Input file: standard input Output file: standard output Balloon Color: Da ...
- 本地Git连接远程Gitlab
本地端安装https://www.cnblogs.com/wei9593/p/11698204.html 1.打开本地git bash,使用如下命令生成ssh公钥和私钥 ssh-keygen -t r ...
- Python之禅 this模块
The Zen of Python, by Tim Peters Beautiful is better than ugly.Explicit is better than implicit.Simp ...
- apache httpd.conf 文件的 详解
文章 摘自 :http://www.php100.com/html/webkaifa/apache/2009/0418/1192.html ServerRoot /usr/local Server ...
- $\LaTeX$数学公式大全8
$8\ Miscellaneous\ symbols$ $\infty$ \infty $\nabla$ \nabla $\partial$ \partial $\eth$ \eth $\clubsu ...
- 连接数据库出现The server time zone value '�й���ʱ��' is unrecogni等问题的解决方案
使用JDBC连接数据库出现The server time zone value '�й���ʱ��' is解决方案 ** 将jdbc.properties中url后加入?serverTimezone ...
- 【python / mxnet / gluoncv / jupyter notebook】变换场景的同一行人多重识别
程序环境为高性能集群:CPU:Intel Xeon Gold 6140 Processor * 2(共36核心)内存:512GB RAMGPU:Tesla P100-PCIE-16GB * 2 数 ...
- Mac 10.15 关闭SIP
升级Mac后SIP开启了,根目录不能创建文件了 关闭 sip,终端输入 sudo mount -uw / 在我们开发过程中,有时候我们安装一些工具软件需要将文件拷贝到系统限制更改的文件夹中,甚至有时需 ...
- Laravel5.2中Eloquent与DB类的区别是什么?
要了解这些先看看关于数据库组件的那些事儿(就是 Eloquent ORM) 数据库组件大概分了三层: 数据库连接层 查询构造层 应用层 来看一下每一层有哪些东西,分别对应文档的哪一部分: 数据库连接层 ...