【备战秋招】每日一题:2023.04.22-民生科技技术研发-第一题-删点

为了更好的阅读体检,可以查看我的算法学习网
本题在线评测链接:P1214

题目内容

塔子哥是一个喜欢探险的小男孩,有一天,他在森林里发现了一棵奇怪的树。这棵树的枝干和叶子都是紫色的,而且上面还有许多闪闪发光的水晶。

塔子哥觉得这棵树非常美丽,就想把它带回家。但是他发现,这棵树非常沉重,而且很难拔出来。他只好用剪刀剪下一些枝干和叶子,放在他的背包里。

回到家后,塔子哥把他收集的树枝和叶子摆在桌子上,发现它们竟然还能连在一起,形成一个小型的树状结构。

他觉得很有趣,就开始用不同的方式拼接它们。他发现,如果他选择一个点,把它和它连接的所有枝干和叶子都拿走,那么剩下的部分就会分成两个部分。

现在塔子哥想知道,有多少种不同的删点方法可以让剩下的部分就会分成两个部分。你能帮帮他吗?

输入描述

第一行输入为一个正整数 n n n ,代表树的节点数量

接下来的 n − 1 n - 1 n1 行,每行输入两个正整数 u u u v v v ,代表点 u u u 和点 v v v 有一条边连接。

1 ≤ n ≤ 1 0 5 1 \le n \le 10^5 1n105

输出描述

一个整数,代表删点的方案数。

样例

输入

5
1 2
2 3
3 4
4 5

输出

3

样例解释

删除 2 2 2 号点, 3 3 3 号点和 4 4 4 号点均可。

思路:简单题

树上删除一个点之后联通块的个数和他所连的边有关,也就是点的 . 联通块个数 = 度。所以记录一下有多少个点的度 = 2.

代码

java代码

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
class Main {
    static int res = 0;
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        // du 代表点的度数个数
        int [] du = new int [n + 5];
        for (int i = 0; i < n-1; i++) {
            int a = in.nextInt();
            int b = in.nextInt();
            du[a]++;
            du[b]++;
        }
        // 统计du[i] = 2 的点
        res = 0;
        for (int i = 1; i <= n; i++) {
            if (du[i] == 2) res++;
        }
        System.out.println(res);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

塔子哥学算法

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值