我是傻逼我是傻逼

#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,求树上一点到其他点的距离之和)的更多相关文章

  1. hdu6446 网络赛 Tree and Permutation(树形dp求任意两点距离之和)题解

    题意:有一棵n个点的树,点之间用无向边相连.现把这棵树对应一个序列,这个序列任意两点的距离为这两点在树上的距离,显然,这样的序列有n!个,加入这是第i个序列,那么这个序列所提供的贡献值为:第一个点到其 ...

  2. HDU 4514 - 湫湫系列故事——设计风景线 - [并查集判无向图环][树形DP求树的直径]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4514 Time Limit: 6000/3000 MS (Java/Others) Memory Li ...

  3. 浅谈关于树形dp求树的直径问题

    在一个有n个节点,n-1条无向边的无向图中,求图中最远两个节点的距离,那么将这个图看做一棵无根树,要求的即是树的直径. 求树的直径主要有两种方法:树形dp和两次bfs/dfs,因为我太菜了不会写后者这 ...

  4. 树形dp - 求树的直径

    随着杭州西湖的知名度的进一步提升,园林规划专家湫湫希望设计出一条新的经典观光线路,根据老板马小腾的指示,新的风景线最好能建成环形,如果没有条件建成环形,那就建的越长越好. 现在已经勘探确定了n个位置可 ...

  5. 2017 Wuhan University Programming Contest (Online Round) B Color 树形dp求染色方法数

    /** 题目:Color 链接:https://oj.ejq.me/problem/23 题意:给定一颗树,将树上的点最多染成m种颜色,有些节点不可以染成某些颜色.相邻节点颜色不同.求染色方法数. 思 ...

  6. HDU - 3899 JLUCPC(树形dp求距离和)

    JLUCPC Dr. Skywind and Dr. Walkoncloud are planning to hold the annual JLU Collegiate Programming Co ...

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

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

  8. 树形DP求树的重心 --SGU 134

    令一个点的属性值为:去除这个点以及与这个点相连的所有边后得到的连通分量的节点数的最大值. 则树的重心定义为:一个点,这个点的属性值在所有点中是最小的. SGU 134 即要找出所有的重心,并且找出重心 ...

  9. CSP模拟赛 Repulsed(树形DP)

    题面 ⼩ w ⼼⾥的⽕焰就要被熄灭了. 简便起⻅,假设⼩ w 的内⼼是⼀棵 n − 1 条边,n 个节点的树. 现在你要在每个节点⾥放⼀些个灭⽕器,每个节点可以放任意多个. 接下来每个节点都要被分配给 ...

随机推荐

  1. angularJS限制 input-text 只能输入数字

    最初的目的是为了让输入的字段仅为数字,不要包含英文,理所当然想到了正则表达,比起对每一个字符判断ASCII码要方便的多 JS正则表达式的使用,可以参考正则表达式 以match为例,全局匹配非数字 va ...

  2. JavaWeb_(Hibernate框架)使用c3p0与Dbutils开发用户注册功能

    使用c3p0与Dbutils开发用户注册功能: 用户在register.jsp表单成功后,页面跳转到login.html,数据库中会存放用户注册的信息 <%@ page language=&qu ...

  3. win7安装ElasticSearch集群

    1.单节点安装请参考上篇博客 http://www.cnblogs.com/lianliang/p/7953754.html 2.集群的安装(这里模拟两个节点) 1)集群的安装,基于之前单节点的安装 ...

  4. Alpha冲刺(3/6)

    队名:new game 组长博客:戳 作业博客:戳 组员情况 鲍子涵(队长) 燃尽图 过去两天完成了哪些任务 才两天,也就是实现一些功能而已 复习 接下来的计划 实现更多的功能 为下周的比赛准备 还剩 ...

  5. 【Java面试宝典】正则表达式

    文章目录 正则表达式-语法 Pattern.compile方法 ● 请你谈谈Java中是如何支持正则表达式操作的? 考察点:正则表达式 参考回答: Java中的String类提供了支持正则表达式操作的 ...

  6. oracle性能诊断sql

    --1.阻塞及等待事件信息查询-- 查询所有会话的状态.等待类型及当前正在执行的SQL脚本select t.SID, t.SERIAL#, t.Status, t.Action, t.Event, t ...

  7. MySQL 存储过程 函数 routine 权限

    MySQL 存储过程 函数 routine 权限 Table of Contents 1. mysql存储过程/函数权限 1.1. 相关对象操作权限检查 1.2. 执行权限 1 mysql存储过程/函 ...

  8. 【React自制全家桶】四、React中state与props的分析与比较

    一.state 1.state的作用 state是React中组件的一个对象.React把用户界面当做是状态机,想象它有不同的状态然后渲染这些状态,可以轻松让用户界面与数据保持一致. React中,更 ...

  9. distinct 与group by 去重

    mysql中常用去重复数据的方法是使用 distinct  或者group by ,以上2种均能实现,但2者也有不同的地方. distinct 特点: 如:select  distinct   nam ...

  10. 前端Ajax跨域解决方案

    业务场景: 前后端分离需要对接数据接口. 接口测试是在postman做的,今天才开始和前端对接,由于这是我第一次做后端接口开发(第一次嘛,问题比较多)所以在此记录分享我的踩坑之旅,以便能更好的理解,应 ...