牛客网 【每日一题】4月15日 Treepath

文章目录

    • 题目描述
    • 题解:
    • 代码:

传送

时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

给定一棵n个点的树,问其中有多少条长度为偶数的路径。路径的长度为经过的边的条数。x到y与y到x被视为同一条路径。路径的起点与终点不能相同。

输入描述:

第一行一个数n表示点的个数; 接下来n-1行,每行两个整数x,y表示边; 保证输入数据形成一棵树; 1<=n<=100000

输出描述:

一行一个整数表示答案。

示例1
输入

3
1 2
1 3

输出

1

题解:

求长度为偶数的路径
偶数层的点到偶数层的点长度是偶数
奇数层到奇数层的点的路径长度也是偶数
奇数层的点到偶数层的点路径长度就算奇数
所以需要统计多少个奇数层多少点偶数层多少点
我们发现如果层数奇偶性一样,路径长度就是偶数
为什么呢?引用邓老师的讲解

我们可以考虑先让两个点里深度深的那个往上走,走到和另外一个点一样的高度,这个显然是偶数步完成的,之后两个点一起往上走直到汇合,走到步数是一样的,所以最终加起来也是偶数。

然后我们会用到数组dp[][]
dp[i][0/1]表示以i为根的子树,与根节点i的距离
因为距离长度只有偶数奇数两种情况,所以我们把偶数设为0,奇数设为1,这样好统计
u是v的父亲,
也就是一个来自v的子树的点,到u点的路径会比到v的路径长度 长1
这样我们有:
dp[u][0]+=dp[v][1]
以u为根的子树,与u的距离长度为偶数的情况一个本身,另一个来自dp[v][i].因为以v为根节点,与v的距离为奇数,那到u的距离就要加1,也就是偶数
dp[u][1]+=dp[v][0]
同理

sum + = dp [ u ] [ 0 ] * dp [ v ] [ 1 ] + dp [ u] [ 1 ] * dp [ v ] [ 0 ]
已有dp[u][0]条以u为端点长度为偶数的路径,与dp[v][1]条以v为端点长度为奇数的路径合并可以得到 dp [ u ] [ 0 ] * dp [ v ] [ 1 ] 条长度为偶数的路径
同理dp[u][i]*dp[v][0]也是一样

代码:

#pragma GCC optimize(2)
#include<bits/stdc++.h>
typedef long long ll;
const int maxn=1e5+2;
using namespace std;
ll dp[maxn][3];
ll sum=0;
vector<int> edge[maxn];
void dfs(int u,int fa)
{dp[u][0]=1;for (int v : edge[u]) {if(v==fa)continue;dfs(v,u);sum+=dp[u][0]*dp[v][1]+dp[u][1]*dp[v][0];dp[u][0]+=dp[v][1];dp[u][1]+=dp[v][0];}
}
int main()
{int n;scanf("%d",&n);int a,b;for(int i=1;i<n;i++){cin>>a>>b;edge[a].push_back(b);edge[b].push_back(a);}dfs(1,0);cout<<sum;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/320343.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.net core grpc 实现通信(一)

现在系统都服务化&#xff0c;.net core 实现服务化的方式有很多&#xff0c;我们通过grpc实现客户端、服务端通信。grpc(https://grpc.io/)是google发布的一个开源、高性能、通用RPC&#xff08;Remote Procedure Call&#xff09;框架&#xff0c;使用HTTP/2协议&#xff0c;…

【数学】数列(jzoj 2752)

数列 jzoj 2752 题目大意&#xff1a; 给你一个正整数n&#xff08;有多组数据&#xff09;&#xff0c;让你把它分为一个连续的正整数列之和&#xff08;长度大于1&#xff09;&#xff0c;然你求着个数列最短的长度&#xff0c;如果这个序列不存在&#xff0c;那输出-1 输…

NOIP提高组复赛 知识点整理

枚举、模拟、贪心、递推、排序&#xff08;快排&#xff09; 高精度&#xff1a; 加法&#xff0c;减法&#xff0c;乘法&#xff08;应该只会有高精乘单精&#xff09;&#xff0c;高精度除单精 分治: 二分查找 整体二分 CDQ分治 三分 搜索: dfs、剪枝 bfs、双向bfs 启发式搜索…

子序列

牛客网题目 题目描述 给出一个长度为n的序列&#xff0c;你需要计算出所有长度为k的子序列中&#xff0c;除最大最小数之外所有数的乘积相乘的结果 输入描述: 第一行一个整数T&#xff0c;表示数据组数。 对于每组数据&#xff0c;第一行两个整数N&#xff0c;k&#xff0c;含义…

P5341-[TJOI2019]甲苯先生和大中锋的字符串【SAM】

正题 题目链接:https://www.luogu.com.cn/problem/P5341 题目大意 给出一个字符串&#xff0c;求出现次数恰好为kkk的子串中&#xff0c;出现最多的长度。 解题思路 先根据TTT构建一个SAMSAMSAM&#xff0c;对于一个endposendposendpos类中&#xff0c;所有出现串的长度一定…

横向扩展你的ASP.NET Core SignalR 应用

前言最近项目要用signalr来做实时通信&#xff0c;在研究asp.netcore signalr 应用横向扩展时候发现了这篇国外的博客&#xff0c;和大家分享一下原文连接地址负载均衡当你把你的应用部署到生产环境时&#xff0c;你将会想横向扩展你的应用。横向扩展意味着要你的应用要在多台服…

P3181-[HAOI2016]找相同字符【SAM】

正题 题目链接:https://www.luogu.com.cn/problem/P3181 题目大意 两个字符串&#xff0c;求有多少个(l1,r1,l2,r2)(l_1,r_1,l_2,r_2)(l1​,r1​,l2​,r2​)使得字符串l1∼r1l_1\sim r_1l1​∼r1​的子串与l2∼r2l_2\sim r_2l2​∼r2​的子串相等。 解题思路 SAMSAMSAM做法 …

池化层(pooling)

目录 一、池化层 1、最大池化层 2、平均池化层 3、总结 二、代码实现 1、最大池化与平均池化 2、填充和步幅(padding和strides) 3、多个通道 4、总结 一、池化层 1、最大池化层 2、平均池化层 3、总结 池化层返回窗口中最大或平均值环节卷积层对位置的敏感性同样有窗口…

牛客网【每日一题】4月16日题目精讲 逆序对

文章目录题目描述题解&#xff1a;代码传送时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 131072K&#xff0c;其他语言262144K 64bit IO Format:%lld 题目描述 求所有长度为n的01串中满足如下条件的二元组个数&#xff1a; 设第i位和第j位分别…

[BZOJ1095][ZJOI2007]捉迷藏 Query on a tree IV(树链剖分)

首先&#xff0c;我们求出树的重链&#xff0c;然后对于每一条链&#xff0c;建一颗线段树 树大概长这样&#xff1a; &#xff08;其中用红边连起来的是一条条重链&#xff09; 在线段树上&#xff0c;我们维护&#xff1a; Opt(u)&#xff1a;经过 u节点代表的链的其中一段 …

【dfs】树(jzoj 2753)

树 jzoj 2753 题目大意&#xff1a; 给你一棵树&#xff0c;每一个点都一个值&#xff0c;现在问你有多少条路径可以满足以下条件&#xff1a; 1、方向都是向下 2、路径上的点的值总和为S 输入样例 3 3 1 2 3 1 2 1 3输出样例 2数据范围 对于30%数据&#xff0c;N⩽100N…

ASP.NET Core Web API + Identity Server 4 + Angular 6 实战小项目视频

今天开始尝试录制ASP.NET Core Web API的教学视频. 这是一个小项目的实战视频, 该项目采用了:ASP.NET Core 2.1 做APIIdentity Server 4Angular 6Angular Material这个项目比较简单, 适合ASP.NET Core Web API 和 Angular 初学者. 项目最终完成的大致效果如图:声明: 以前虽然经…

P6139-[模板]广义后缀自动机(广义 SAM)

正题 题目链接:https://www.luogu.com.cn/problem/P6139 题目大意 求nnn个串的不同子串个数 解题思路 如何在SAMSAMSAM中插入多个字符串。 可以我们可以通过更改lastlastlast为之前的节点来做&#xff0c;如果插入一个之前插入过的节点就按照之前SAMSAMSAM的方法特判就好了。…

[USACO]Sprinklers 2: Return of the Alfalfa P(网格DP)

思路&#xff1a; 由题目易得&#xff1a;网格内种植的两种植物形成了一条 左上—右下 的分界线&#xff0c;考虑将问题转化成 DP求出有多少条合法的分界线 我们注意到&#xff1a; 分界线上的点都必须放洒水器&#xff0c;且所放洒水器有唯一选择&#xff1b; 其他的可以放洒…

最小生成树(模板)

文章目录关于时间复杂度&#xff1a;Kruskal讲解Kruskal模板Prim讲解Prim模板昨天做蓝桥杯的题&#xff0c;最后一题最小生成树&#xff0c;但好久没用一下子生疏了。。。又过了几天离散学到了最小生成树。。。趁此复习一波最小生成树两种方法&#xff1a; Prim和Kruskal 关于…

【数论】挖掘机技术哪家强(jzoj 3858)

挖掘机技术哪家强 jzoj 3858 题目大意 给你多个n&#xff0c;对于每个n&#xff0c;x为n的因数&#xff0c;设s(x)为小于x且与x互质的数的和&#xff0c;让你求每一个x的s(x)总和 原题 有人问现实中为什么总是男生追求女生&#xff0c;反过来很少。实际上女生也是想主动追求…

.net core grpc consul 实现服务注册 服务发现 负载均衡(二)

在上一篇 .net core grpc 实现通信(一) 中&#xff0c;我们实现的grpc通信在.net core中的可行性&#xff0c;但要在微服务中真正使用&#xff0c;还缺少 服务注册&#xff0c;服务发现及负载均衡等&#xff0c;本篇我们将在 .net core grpc 通信 的基础上加上 服务注册&#x…

【BZOJ3218】a+b problem (最小割 + 主席树)

传送门 继续优化&#xff1a;把a[ ]离散化 #include<bits/stdc.h> using namespace std; const int inf1000000007; const int N200010; const int M1000010;struct Edge{int u,v,f,next; }edge[M]; int head[N],cnt; int s,t,flow,level[N];struct Node{int x,id; }e[…

ST表讲解

ST表主要用于解决RMQ问题&#xff08;区间最值问题&#xff09; 当然你可以用线段树等&#xff0c;但今天用一种ST表&#xff08;倍增算法&#xff09; ST表是倍增算法的一个典型应用 暴力做RMQ问题&#xff0c;往往会超时&#xff0c;ST表利用对其进行优化 给定一段序列A&am…

P3346-[ZJOI2015]诸神眷顾的幻想乡【广义SAM】

正题 题目链接:https://www.luogu.com.cn/problem/P3346 题目大意 一棵树&#xff0c;求树上所有路径构成的字符串有多少种。&#xff08;叶子不超过303030个&#xff09; 解题思路 如果是根节点到一些节点的路径的话很好做&#xff0c;直接建广义SAMSAMSAM即可&#xff0c;…