题目链接:https://ac.nowcoder.com/acm/problem/14248
来源:牛客网

题目描述

给定一棵n个点的树,问其中有多少条长度为偶数的路径。路径的长度为经过的边的条数。x到y与y到x被视为同一条路径。路径的起点与终点不能相同。
输入描述:
第一行一个数n表示点的个数;接下来n-1行,每行两个整数x,y表示边;保证输入数据形成一棵树;1<=n<=100000
输出描述:
一行一个整数表示答案。

示例1

输入

3
1 2
1 3

输出

1

题目要求长度为偶数的路径数,那么先用链式前向星建图,然后从深度角度出发, 以 1 为根 dfs 求出全部深度

那么我们画个图观察一下,发现偶数层到偶数层 距离为偶数
奇数到奇数层 距离距离也为偶数
那么我们求出奇数层节点为a, 偶数层节点个数为b
答案为排列组合,C(a,2)+C(b,2)C(a,2)+C(b,2)C(a,2)+C(b,2)
换成代码就是(a−1)∗a/2+(b−1)∗b/2(a - 1) * a / 2 + (b - 1) *b / 2(a−1)∗a/2+(b−1)∗b/2
时间复杂度
O(n)O(n)O(n)

#include<bits/stdc++.h>
#define ls (p<<1)
#define rs (p<<1|1)
#define mid (l+r)/2
#define over(i,s,t) for(register long long i=s;i<=t;++i)
#define lver(i,t,s) for(register long long i=t;i>=s;--i)
//#define int __int128
using namespace std;
typedef long long ll;//全用ll可能会MLE或者直接WA,试着改成int看会不会A
const ll N=100007;
const ll INF=1e10+9;
const double EPS=1e-10;//-10次方约等于趋近为0
ll dep[N];
ll n,head[N],tot;
struct node
{ll v,nex;
}G[N<<1];
void add(ll u,ll v)
{G[++tot].v=v;G[tot].nex=head[u];head[u]=tot;
}void dfs(ll u,ll fa)
{dep[u]=dep[fa]+1;for(ll i=head[u];i;i=G[i].nex){if(G[i].v==fa)continue;dfs(G[i].v,u);}
}
int main()
{scanf("%lld",&n);over(i,1,n-1){ll x,y;scanf("%lld%lld",&x,&y);add(x,y);add(y,x);}dfs(1,0);ll a=0,b=0;over(i,1,n)if(dep[i]&1)a++;else b++;printf("%lld\n",ll(a*(a-1)/2)+ll(b*(b-1)/2));return 0;
}

还有一种树形DP我明天再写,先睡了

附上官方题解:
【每日一题】4月15日题目精讲

【牛客每日一题】4.15 Treepath 题解(树上dfs/树形DP)相关推荐

  1. 牛客每日一题3.31 城市网络 树上倍增

    牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 有一个树状的城市网络(即 n 个城 ...

  2. 力扣牛客每日刷题(Python解法持续更新)

    力扣牛客每日刷题(持续更新) 初试结束第15天, 之前简单的处理了部分毕设方面的任务, 对接下来的学习做了个简单的规划 决定每天开始刷几道力扣题提高一下算法的理解,不能让之前学的数据结构都忘记了 每道 ...

  3. 【牛客每日一题】4.16 逆序对 ( 数学 , 排列组合 ,快速幂 , 快速乘 )

    [每日一题]逆序对 链接:https://ac.nowcoder.com/acm/problem/14731 来源:牛客网 题目描述 求所有长度为n的01串中满足如下条件的二元组个数: 设第i位和第j ...

  4. 【牛客每日一题】 4.13 Xorto(前缀异或和,枚举优化/映射)

    链接:https://ac.nowcoder.com/acm/problem/14247 来源:牛客网 题目描述 给定一个长度为n的整数数组,问有多少对互不重叠的非空区间,使得两个区间内的数的异或和为 ...

  5. 【牛客每日一题】tokitsukaze and Soldier 题目精讲 贪心、优先队列、堆

    链接:https://ac.nowcoder.com/acm/problem/50439 来源:牛客网 ACM在线模板 今天才发现牛客推出了一个每日一题的版块,3月25号就开始了,今天才发现,赶紧补救 ...

  6. 牛客每日一题系列(持续更新)

    均由Java实现 题目 奇数位上都是奇数位或偶数位上都是偶数位 有假币 最难的问题 因子个数 分解因数 斐波那契凤尾 剪花布条 客似云来 收件人列表 养兔子 年会抽奖 数据库连接池 mkdir 发邮件 ...

  7. 数学考试(牛客每日一题)变形一

    题意 给一个长度为n的区间,找两个不相交的区间,区间的长度不确定. 思路 这个题和数学考试那一题唯一不同的是区间的长度不确定了. 在数学考试那个题中,我们是记录了一个maxn[i] 来表示i~n中的区 ...

  8. (牛客每日一题)[SHOI2008]小约翰的游戏JOHN(Anti-Nim)

    这是一道裸Anti-Nim游戏 先手必胜条件(满足下面两个其中一个就行): *每一块石子的数量都为1,且总SG值为0时 *至少有一块石子的数量大于1,且 总SG值不为0时 #include <b ...

  9. 『牛客|每日一题』走迷宫

    ​ 活动地址:CSDN21天学习挑战赛

最新文章

  1. NR 5G L3无线资源控制层
  2. Linux内核中流量控制(16)
  3. html5 将id的值用于top_web前端分享HTML5常见面试题集锦四
  4. Java网络编程1---基础
  5. 埃及分数问题(带乐观估计函数的迭代加深搜索算法-IDA*)
  6. HbuilderX 左侧项目栏文件位置和打开的文档同步(对应显示) - 设置篇
  7. 抗衰老,吃这些食物越来越年轻
  8. delegate、notification、KVO各优缺点
  9. Spark utils —— 设置日志级别
  10. kafka php 教程,php 使用kafka
  11. python函数的传参要求_python函数传参问题,一直没弄明白
  12. ros学习-中国大学MOOC---《机器人操作系统入门》课程讲义
  13. 转自《我的2017,熠熠生辉》的沙发评论
  14. 系统篇: ext4 文件系统
  15. c语言例题15:折半查找
  16. Deep Learning with Pytorch 中文简明笔记 第七章 Telling birds from airplanes: Learning from images
  17. 移动端APP测试总结--转
  18. 【CRH】列车通过曲线时,曲线半径、超高值与车速的关系
  19. 严重性 代码 说明 项目 文件 行 禁止显示状态 错误 无法将“obj\Debug\上位机.exe”复制到“bin\Debug\上位机.exe”。超出了重试计数 10。失败
  20. 大数据时代带来的伦理问题

热门文章

  1. 基于Pytorch的从零开始的目标检测 | 附源码
  2. Exchange Server 2016管理系列课件19.开启和管理存档邮箱
  3. 关于软件开发你真正需要知道的几个事情
  4. The ECDSA host key for XXX has changed
  5. Android--学习路线指南
  6. Linux用户查看系统有多少用户在登录
  7. master.dbo.spt_values
  8. Heartbeat双机热备配置
  9. 彻底搞定IE7频繁弹出“确实允许此网页访问剪贴板吗”
  10. grails springboot_groovy 使用spring boot