题目链接

题意

给一棵树,对于一个节点,与它相邻的结点可以连一条边,求所有点对间距离之和

思路

任意两点间的距离被优化为$\left \lceil \frac{s}{2} \right \rceil$,转化为任意两点间距加间距为奇数的路径数,即$\frac{\sum_{i\in G,j\in G,i<j}dis[i][j]+\sum_{i\in G,j\in G,i<j[dis[i][j]=1(mod 2)]}}{2}$,奇数路径可由深度奇偶性不同的点数相乘得到,即$\sum_{i\in G}dep[i]=1(mod 2)*\sum_{i\in G}dep[i]=0(mod2)$

代码

//#pragma comment(linker, "/STACK:1024000000,1024000000")
#include <map>
#include <set>
#include <cmath>
#include <queue>
#include <stack>
#include <cstdio>
#include <vector>
#include <cassert>
#include <cstring>
#include <iostream>
#include <algorithm> #define IOS ios::sync_with_stdio(0),cin.tie(0);
#define DBG(x) cerr << #x << " = " << x << endl; using namespace std; typedef long long LL;
typedef long double LD;
typedef unsigned long long ULL; const int inf = 0x3f3f3f3f;
const int mod = 1000000007;
const double eps = 1e-8;
const double pi = acos(-1.0); void file(){
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
} const int maxn = 2e5+5;
const int maxm = 4e5+5; int n;
int head[maxn],tot;
int dep[maxn],vis[maxn];
LL cnt0,cnt1;
LL siz[maxn]; struct edgenode{
int to,next;
}edge[maxm]; void addedge(int u,int v){
edge[tot].to=v;
edge[tot].next=head[u];
head[u]=tot++;
} void dfs(int x,int dep){
siz[x]=1;
if(vis[x] == inf){
vis[x]=dep;
if(abs(dep)%2 == 0)cnt0++;
else cnt1++;
}
for(int i=head[x];i != -1;i=edge[i].next){
int v=edge[i].to;
if(vis[v] == inf){
dfs(v,dep+1);
siz[x]+=siz[v];
}
}
} namespace BakuretsuMahou{
void Explosion(){
memset(head,-1,sizeof head);
memset(vis,0x3f,sizeof vis);
scanf("%d",&n);
for(int i=1;i<n;i++){
int a,b;
scanf("%d%d",&a,&b);
addedge(a,b);
addedge(b,a);
}
dfs(1,0);
LL ans=cnt0*cnt1;
for(int i=1;i<=n;i++)
ans+=siz[i]*(1LL*n-siz[i]);
printf("%I64d\n",ans/2);
}
} int main(){
//IOS
//file();
BakuretsuMahou::Explosion();
return 0;
}

  

最新文章

  1. U盘写保护,不能被格式化
  2. 第二章:搭建Android开发环境
  3. *** Assertion failure in -[UIApplication _runWithMainScene:transitionContext iOS9.1闪退问题解决
  4. 高性能MySQL第1章知识点梳理
  5. STM32的PWM输出极性的问题
  6. xcode中没有autoSizing的设置
  7. apache2.4配置虚拟主机
  8. 《第一行代码》学习笔记6-活动Activity(4)
  9. MEMS加速度计工作原理
  10. 机器学习——深度学习(Deep Learning)
  11. ES6中的Array.from()函数的用法
  12. Python面向对象之反射
  13. database锁实现
  14. Looper Handler Mssage
  15. 1.java面向对象编程三大特性之封装
  16. Spring框架的JDBC模板技术概述
  17. lua函数定义
  18. [转帖学习]Howto Shrink a Thin Provisioned Virtual Disk (VMDK)
  19. weblogic 12C 安全加强:更改Console及管理端口
  20. 七、配置ssh keys连通github跟ssh-agent

热门文章

  1. 0106笔记--vc2012 打印堆栈
  2. linux 基础(一)
  3. Linux:Day12(下) 进程、任务计划
  4. Google Chrome等浏览器不允许关闭点击跟踪??
  5. Spring的事件机制详解
  6. Google第三方网站登录(JavaScript SDK)
  7. 【原创】讲讲亿级PV的负载均衡架构
  8. Python--day03(变量、数据类型、运算符)
  9. MongoDB小东西
  10. Kubernetes — 从0到1:搭建一个完整的Kubernetes集群