题目链接

题意

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

思路

任意两点间的距离被优化为$\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)$

代码

  1. //#pragma comment(linker, "/STACK:1024000000,1024000000")
  2. #include <map>
  3. #include <set>
  4. #include <cmath>
  5. #include <queue>
  6. #include <stack>
  7. #include <cstdio>
  8. #include <vector>
  9. #include <cassert>
  10. #include <cstring>
  11. #include <iostream>
  12. #include <algorithm>
  13.  
  14. #define IOS ios::sync_with_stdio(0),cin.tie(0);
  15. #define DBG(x) cerr << #x << " = " << x << endl;
  16.  
  17. using namespace std;
  18.  
  19. typedef long long LL;
  20. typedef long double LD;
  21. typedef unsigned long long ULL;
  22.  
  23. const int inf = 0x3f3f3f3f;
  24. const int mod = 1000000007;
  25. const double eps = 1e-8;
  26. const double pi = acos(-1.0);
  27.  
  28. void file(){
  29. freopen("in.txt", "r", stdin);
  30. freopen("out.txt", "w", stdout);
  31. }
  32.  
  33. const int maxn = 2e5+5;
  34. const int maxm = 4e5+5;
  35.  
  36. int n;
  37. int head[maxn],tot;
  38. int dep[maxn],vis[maxn];
  39. LL cnt0,cnt1;
  40. LL siz[maxn];
  41.  
  42. struct edgenode{
  43. int to,next;
  44. }edge[maxm];
  45.  
  46. void addedge(int u,int v){
  47. edge[tot].to=v;
  48. edge[tot].next=head[u];
  49. head[u]=tot++;
  50. }
  51.  
  52. void dfs(int x,int dep){
  53. siz[x]=1;
  54. if(vis[x] == inf){
  55. vis[x]=dep;
  56. if(abs(dep)%2 == 0)cnt0++;
  57. else cnt1++;
  58. }
  59. for(int i=head[x];i != -1;i=edge[i].next){
  60. int v=edge[i].to;
  61. if(vis[v] == inf){
  62. dfs(v,dep+1);
  63. siz[x]+=siz[v];
  64. }
  65. }
  66. }
  67.  
  68. namespace BakuretsuMahou{
  69. void Explosion(){
  70. memset(head,-1,sizeof head);
  71. memset(vis,0x3f,sizeof vis);
  72. scanf("%d",&n);
  73. for(int i=1;i<n;i++){
  74. int a,b;
  75. scanf("%d%d",&a,&b);
  76. addedge(a,b);
  77. addedge(b,a);
  78. }
  79. dfs(1,0);
  80. LL ans=cnt0*cnt1;
  81. for(int i=1;i<=n;i++)
  82. ans+=siz[i]*(1LL*n-siz[i]);
  83. printf("%I64d\n",ans/2);
  84. }
  85. }
  86.  
  87. int main(){
  88. //IOS
  89. //file();
  90. BakuretsuMahou::Explosion();
  91. return 0;
  92. }

  

Codeforces 1060E(dfs计数)的更多相关文章

  1. CodeForces 877E DFS序+线段树

    CodeForces 877E DFS序+线段树 题意 就是树上有n个点,然后每个点都有一盏灯,给出初始的状态,1表示亮,0表示不亮,然后有两种操作,第一种是get x,表示你需要输出x的子树和x本身 ...

  2. Codeforces Round #665 (Div. 2) D. Maximum Distributed Tree (dfs计数,树)

    题意:给你含有\(n\)个节点,\(n-1\)条边的树,以及\(m\)个质数和\(1\),你需要在这\(m\)个质数和一个\(1\)选择数(质数只能选一次,\(1\)可以多选)给\(n-1\)条边赋值 ...

  3. Cyclic Components CodeForces - 977E(DFS)

    Cyclic Components CodeForces - 977E You are given an undirected graph consisting of nn vertices and  ...

  4. Codeforces 1060E(思维+贡献法)

    https://codeforces.com/contest/1060/problem/E 题意 给一颗树,在原始的图中假如两个点连向同一个点,这两个点之间就可以连一条边,定义两点之间的长度为两点之间 ...

  5. poj 3140 Contestants Division(树形dp? dfs计数+枚举)

    本文出自   http://blog.csdn.net/shuangde800 ------------------------------------------------------------ ...

  6. CodeForces 510B DFS水题

    题目大意:在图中找到一个字符可以围成一个环(至少有环四个相同元素) 题目思路:对当前点进行搜索,如果发现可以达到某个已经被查找过的点,且当前点不是由这个点而来,则查找成功. #include<c ...

  7. Tree Requests CodeForces - 570D (dfs水题)

    大意: 给定树, 每个节点有一个字母, 每次询问子树$x$内, 所有深度为$h$的结点是否能重排后构成回文. 直接暴力对每个高度建一棵线段树, 查询的时候相当于求子树内异或和, 复杂度$O((n+m) ...

  8. E - Mahmoud and Ehab and the bipartiteness CodeForces - 862B (dfs黑白染色)

    Mahmoud and Ehab continue their adventures! As everybody in the evil land knows, Dr. Evil likes bipa ...

  9. Military Problem CodeForces - 1006E(dfs搜一下 标记一下)

    题意: 就是有一颗树  然后每次询问 父结点 的 第k个结点是不是他的子嗣...是的话就输出这个子嗣..不是 就输出-1 解析: 突然想到后缀数组的sa 和 x的用法..就是我们可以用一个id标记当前 ...

随机推荐

  1. Example of DenseCRF with non-RGB data

    本笔记本通过一个示例说明如何在非rgb数据上使用DenseCRFs.同时,它将解释基本概念并通过一个示例进行演示,因此即使您正在处理RGB数据,它也可能是有用的,不过也请查看PyDenseCRF's ...

  2. Python小数据池和字典操作

    小数据池 #id 查看内存地址 #多个代码块可以使用小数据池 #一个代码块中有一个问题,就是重复使用 #数字 -5~256 #字符串 字符串 乘法总数长度不能超过20, 0,1除外 #不能有特殊字符 ...

  3. AI 生成式对抗网络(GAN)

    生成式对抗网络(Generative Adversarial Network,简称GAN),主要由两部分构成:生成模型G和判别模型D.训练GAN就是两种模型的对抗过程. 生成模型:利用任意噪音(ran ...

  4. System.IO在不存在的路径下创建文件夹和文件的测试

    本文测试System.IO命名空间下的类,在不存在的路径下创建文件夹和文件的效果: 首先测试创建文件夹: System.IO.Directory.CreateDirectory(@"C:\A ...

  5. mm-wiki安装部署

    参考连接:https://github.com/skyhack1212/mm-wiki 打开 https://github.com/phachon/mm-wiki/releases 找到对应平台的版本 ...

  6. 【翻译】WhatsApp 加密概述(技术白皮书)

    目录      简介      术语      客户端注册      会话初始化设置      接收会话设置      交换信息      传输媒体和附件      群组消息      通话设置   ...

  7. Django缓存和内置信号

    缓存 简单概括就是将对数据库操作查询所得到的数据放入另外一台机器上(缓存)中,当用户再次请求时,直接去缓存中拿,避免对数据库的频繁操作,加快数据的显示时间,需要知道的是,缓存里面的数据一般都设置有超时 ...

  8. kafka原理深入研究 (转 )

    一.为什么需要消息系统 1.解耦: 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 2.冗余: 消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险. ...

  9. ondaHTTPError: HTTP 000 CONNECTION FAILED for url

    可能是网络问题,换网络. 可能是获取库的IP无法链接到,换库的IP,如添加清华镜像IP等.

  10. 软件工程(GZSD2015) 第二次作业文档模板

    题目: (此处列出题目) 需求分析: 基本功能 基本功能点1 基本功能点2 ... 扩展功能(可选) 高级功能(可选) 设计 设计点1 设计点2 ... 代码实现 // code here 程序截图 ...