CF1060E Sergey and Subways 假的点分治
#include<bits/stdc++.h> #define MAXN 200010 #define int long long using namespace std; struct Edge{ int end , upEd; }Ed[MAXN << ]; long long head[MAXN] , size[MAXN] , N , minSize , minDir , nowSize , cntEd; long long ans; bool vis[MAXN]; inline void addEd(int a , int b){ Ed[++cntEd].end = b; Ed[cntEd].upEd = head[a]; head[a] = cntEd; } //求当前子树大小 void getNowSize(int dir){ vis[dir] = ; nowSize++; for(int i = head[dir] ; i ; i = Ed[i].upEd) if(!vis[Ed[i].end]) getNowSize(Ed[i].end); vis[dir] = ; } //求重心 void getZX(int dir){ vis[dir] = size[dir] = ; ; for(int i = head[dir] ; i ; i = Ed[i].upEd) if(!vis[Ed[i].end]){ getZX(Ed[i].end); size[dir] += size[Ed[i].end]; maxSize = max(maxSize , size[Ed[i].end]); } maxSize = max(maxSize , nowSize - size[dir]); if(maxSize < minSize){ minSize = maxSize; minDir = dir; } vis[dir] = ; } //算答案 pair < long long , long long > calAns(int dir , int dep){ vis[dir] = ; ans += dep + >> ; nowSize++; pair < ); for(int i = head[dir] ; i ; i = Ed[i].upEd) if(!vis[Ed[i].end]){ pair < ); q.first += t.first; q.second += t.second; } vis[dir] = ; return q; } void work(int dir){ nowSize = ; getNowSize(dir); minSize = nowSize; getZX(dir); , culJi = , culOu = ; vis[t] = ; nowSize = ; for(int i = head[t] ; i ; i = Ed[i].upEd) if(!vis[Ed[i].end]){ int k = nowSize; //注意答案统计! pair < ); ans += (sum * (nowSize - k) + t.first * k + t.second * culOu + culJi * (nowSize - k - t.second)) >> ; sum += t.first; culJi += t.second; culOu += nowSize - k - t.second; } for(int i = head[t] ; i ; i = Ed[i].upEd) if(!vis[Ed[i].end]) work(Ed[i].end); } signed main(){ ios::sync_with_stdio(); cin >> N; ; i < N ; i++){ int a , b; cin >> a >> b; addEd(a , b); addEd(b , a); } work(); cout << ans; ; }
CF1060E Sergey and Subways 假的点分治的更多相关文章
- CF1060E Sergey and Subway(点分治)
给出一颗$N$个节点的树,现在我们**在原图中**每个不直接连边但是中间只间隔一个点的两个点之间连一条边. 比如**在原图中**$u$与$v$连边,$v$与$w$连边,但是$u$与$w$不连边,这时候 ...
- [CF1060E]Sergey and Subway[树dp]
题意 给出 \(n\) 个点的树,求 \(\sum_{i=1}^n{\sum_{j=i}^n{\lceil \frac{dis(i,j)}{2} \rceil}}\) . \(n\leq 2 \tim ...
- CF1060E Sergey and Subway 思维
分两种情况讨论 一种为奇数长为$L$的路径,在经过变化后,我们需要走$\frac{L}{2} + 1$步 一种为偶数长为$L$的路径,在变化后,我们需要走$\frac{L}{2}$步 那么,我们只需要 ...
- cf1060E. Sergey and Subway(树形dp)
题意 题目链接 Sol 很套路的题 直接考虑每个边的贡献,最后再把奇数点的贡献算上 #include<bits/stdc++.h> #define Pair pair<int, in ...
- 【BZOJ3697】采药人的路径 点分治
[BZOJ3697]采药人的路径 Description 采药人的药田是一个树状结构,每条路径上都种植着同种药材.采药人以自己对药材独到的见解,对每种药材进行了分类.大致分为两类,一种是阴性的,一种是 ...
- BZOJ3697:采药人的路径(点分治)
Description 采药人的药田是一个树状结构,每条路径上都种植着同种药材. 采药人以自己对药材独到的见解,对每种药材进行了分类.大致分为两类,一种是阴性的,一种是阳性的. 采药人每天都要进行采药 ...
- 【BZOJ3451】Tyvj1953 Normal - 点分治+FFT
题目来源:NOI2019模拟测试赛(七) 非原题面,题意有略微区别 题意: 吐槽: 心态崩了. 好不容易场上想出一题正解,写了三个小时结果写了个假的点分治,卡成$O(n^2)$ 我退役吧. 题解: 原 ...
- 【luogu3733】【HAOI2017】 八纵八横 (线段树分治+线性基)
Descroption 原题链接 给你一个\(n\)个点的图,有重边有自环保证连通,最开始有\(m\)条固定的边,要求你支持加边删边改边(均不涉及最初的\(m\)条边),每一次操作都求出图中经过\(1 ...
- BZOJ4182 Shopping(点分治+树形dp)
点分治,每次考虑包含根的连通块,做树形多重背包即可,dfs序优化.注意题面给的di范围是假的,坑了我0.5h,心态炸了. #include<iostream> #include<cs ...
随机推荐
- docker 安装软件
Docker Docker官方网址: https://docs.docker.com/ 英文地址 Docker中文网址: http://www.docker.org.cn/ 中文地址 Docker是 ...
- 从零开始学习html(八)CSS选择器——下
六.子选择器 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" ...
- 关注的Elasticsearch大牛博客
1.http://wangnan.tech/ 2.https://elasticsearch.cn/people/wood 3.https://www.jianshu.com/u/244399b1d7 ...
- mysql的varchar字段可以存储多少个中文字符
创建数据库,并创建一张表mytb进行测试 ******************************************************************************* ...
- 用Python实现数据结构之队列
队列 队列与栈的类型很相似,但它遵循的原则是先进先出(FIFO),也就是元素插入的时候只能在该数据结构的末端,而删除只能删除最前面的元素.队列同样应用广泛,例如打印机的队列或者是一个web服务器响应请 ...
- Can't debug c++ project because unable to static library start program *.lib
Can't debug c++ project because unable to static library start program *.lib I'm using a library ( ...
- JUnit单元测试入门
什么是单元测试 写了个类,要给别人用,会不会有bug?怎么办?测试一下. 用main方法测试好不好?不好! 不能一起运行! 大多数情况下需要人为的观察输出确定是否正确 为什么要进行单元测试 重用测试, ...
- vue-cli在控制台创建vue项目时乱码的问题
新装的win10系统,使用vue-cli在控制台创建项目时出现乱码,请问如何处理? 解决: 打开cmd,在控制台输入CHCP 65001,按回车键即可将编码格式设成utf-8,再创建就不会乱码了. 执 ...
- 【PAT】B1041 考试座位号(15 分)
/* */ #include<stdio.h> #include<algorithm> using namespace std; struct stu{ char number ...
- 2.1Python数据处理篇之---内建有关数学的函数
目录 目录 前言 (一)数学相关得内建函数 (二)具体演示 1.求绝对值 2.创建一个复数 3.求商和余数 4.求x得y次幂 5.生成一个序列 6.四舍五入 7.对一个集合求和 8.求最大值 9.求最 ...