【NOI】树 2164 - 子结点的数量 2165 - 子结点的数量(2)1775 - 谁的孙子最多1776 - 谁的孙子最多II

news2024/11/27 9:35:12

文章目录

  • 问题一:2164 - 子结点的数量
  • 问题二:2165 - 子结点的数量(2)
  • 问题三:1775 - 谁的孙子最多
  • 问题四:1776 - 谁的孙子最多II

问题一:2164 - 子结点的数量

类型:树


题目描述:

给定一棵树中的若干父结点和子结点的关系描述(结点 1 是树根),请问该树中,每个结点有多少个子结点。

比如:读入父子关系如下,先读入父结点,再读入子结点。

1 2
2 3
2 4

输入:

第 1 行,读入一个整数 n ,表示树中结点的数量,树中的结点编号也是 1∼n。(n≤100)

接下来n−1 行,每行有一对父子关系 x y,x 表示父结点的编号,y 表示子结点的编号。
输入数据保证一定合法,能够形成一棵树,且不存在重复的父子关系的读入。

输出:

输出 n 个数,用空格隔开,表示按照编号从小到大的顺序,输出每个结点子结点的数量。

样例:
输入:

4
1 2
2 3
2 4

输出:

1 2 0 0

在这里插入图片描述
在这里插入图片描述


解题思路:

正如你所想的一样,接下来让我们代入“凶手”的第一视角,看看是如何干掉这道题的。

在这里插入图片描述

首先认真并完整的读完这道题,发现这道题好简单但是好像没看懂。

在这里插入图片描述

没关系,没有什么可以难到我,桀 ~ 桀 ~ 桀 ~

“先来提取一些有用的知识吧。”,说着就将目光移动到了输入上。

在这里插入图片描述

  1. 读取一个整数n,n表示树中节点的数量。比如输入4,那么就有1,2,3,4这四个节点,并且1是根节点。
  2. 接下来又读取了n-1行的数据,那么我们循环的表达式应该是:for(int i=1;i<=n-1;i++)。
  3. 然后每一行都有一对x,y。x是父节点,y是子节点。
  4. 数据合法,那么不用考虑其他情况。

在这里插入图片描述

  1. 输出只有一行,输出n个数,用空格隔开,那么就是:
for(int i=1;i<=n;i++){
	cout<<输出的数<<" ";
}
  1. 需要输出的是每个节点的子节点的数量。

“嘶~,怎么知道子节点的数量呢?”

在这里插入图片描述

“不急,看看样例怎么回事。”

在这里插入图片描述

分析一下这个样例。

在这里插入图片描述

“等等,好像发现了解题的关键。”

“因为题目保证x是父节点,而y是子节点。因此从根开始输入1在前面,2在后面;2在前面,3在后面;2在前面,4在后面。”

“那这里为什么没有3和4在前面的情况呢?因为3和4没有子节点!既然连孩子都没有,他能当父亲吗?”

“很显然是不能的,所以心机之蛙一直摸你肚子!!!”

在这里插入图片描述

“这个y其实是一个烟雾弹,我们只需要统计一个节点当了几次父亲就能知道它有几个子节点,即x出现的次数。”

“统计的方法也很简单,数组计数法。首先将数组全部初始化为0,数组的下标就是节点的位置。比如数组[1]就是1节点,数组[2]就是2节点;当x出现一次,那么数组[x]就+1。”

“既然分析清楚,那就开始动手吧!”。


1.分析问题
3. 已知:一棵树中的若干父节点和子节点的关系描述 (x一定是y的父)。
4. 未知:每个节点子节点的数量 。
5. 关系:数组计数法 。

2.定义变量

  • n:树中节点总数。
  • a[110]:大小为110的数组,用于存储每个节点的子节点计数。数组元素 a[i] 对应于节点 i 的子节点数量。
    // 二、数据定义
    int n, a[110] = {}, x, y;  // n:节点总数;a[]:子节点计数数组;x, y:输入的父节点与子节点关系

3.输入数据

从标准输入(键盘)读取以下信息:

  • n:树中节点总数。
  • 一系列父节点与子节点关系:逐行读取 x 和 y,表示节点 x 是节点 y 的父节点。
 // 读取并处理父节点与子节点关系
    for (int i = 1; i < n; i++) {
        cin >> x >> y;  // 输入关系:节点x是节点y的父节点
        a[x]++;         // 更新数组a:节点x的子节点计数加1
    }

4.数据计算
遍历数组 a,对于每个索引 i(即每个节点),直接输出其对应的子节点计数 a[i]。

// 四、数据计算与输出
    // 直接输出数组a中的子节点计数,即每个节点的子节点数量
    for (int i = 1; i <= n; i++) {
        cout << a[i] << " ";  // 输出节点i的子节点数量,后跟一个空格
    }

5.输出结果

完整代码如下:

#include <iostream>
using namespace std;

int main() {
    // 一、分析问题
    // 已知:一棵树中的若干父节点和子节点的关系描述
    // 未知:每个节点子节点的数量
    // 关系:数组计数法

    // 二、数据定义
    int n, a[110] = {}, x, y;  // n:节点总数;a[]:子节点计数数组;x, y:输入的父节点与子节点关系

    // 三、数据输入
    cin >> n;  // 输入节点总数

    // 读取并处理父节点与子节点关系
    for (int i = 1; i < n; i++) {
        cin >> x >> y;  // 输入关系:节点x是节点y的父节点
        a[x]++;         // 更新数组a:节点x的子节点计数加1
    }

    // 四、数据计算与输出
    // 直接输出数组a中的子节点计数,即每个节点的子节点数量
    for (int i = 1; i <= n; i++) {
        cout << a[i] << " ";  // 输出节点i的子节点数量,后跟一个空格
    }

    // 五、输出结果
    return 0;  // 程序执行完毕,返回值为0
}

“哼~,真是一个有趣的题。”

在这里插入图片描述

问题二:2165 - 子结点的数量(2)

类型:树


题目描述:

给定一棵树中的若干父结点和子结点的关系描述(结点 1 是树根),请问该树中,每个结点有多少个子结点。
比如:读入父子关系如下(请注意:本题读入的两个数 xy ,不保证 x 是 y 的父)。

1 2
2 3
2 4

因此每个结点的子结点的数量分别是:1 2 0 0 。

输入:

第 1 行,读入一个整数 n ,表示树中结点的数量,树中的结点编号也是1∼n。(n≤100)
接下来n−1 行,每行有一对父子关系 x y,不保证 x 是 y 的父。
输入数据保证一定合法,能够形成一棵树,且不存在重复的父子关系的读入。

输出:

输出 n 个数,用空格隔开,表示按照编号从小到大的顺序,输出每个结点子结点的数量。

样例:
输入:

4
2 1
2 3
2 4

输出:

1 2 0 0

在这里插入图片描述


解题思路:

首先这道题和上道题的解题方法是差不多。

不过差别在是什么地方呢?就是输入的数据。

在这里插入图片描述

题目这里明确表示了不保证x是y的父,那么就不能用上面所说的当了几次父亲那么就有几个儿子的统计办法。

还是利用样例进行分析。

在这里插入图片描述

既然不能利用父节点来统计,那我们将目光移动到箭头。

还记得树的边吗?树的边是连接两个节点的连线,表示这两个节点之间存在某种关系或连接。

样例中2-1,2-3,2-4,那么我们就可以知道节点2拥有3条边,节点1,3,4有1条边。

而一个节点除了有子节点以外还有1个父节点,因此总边数-父节点那条边=子节点的边;那么有几条连接子节点的边就有几个子节点。

还是利用数组计数法,数组下标对应树的节点,每个节点每出现一次,表示该节点有一条边。

这里有一个点需要特别注意,根节点是没有父节点,因此要么对数组[1]进行额外的处理,要么将数组[1]多增加1,然后将数组[1-n]-1输出。


1.分析问题

  1. 已知:一棵树中的若干父节点和子节点的关系描述 (x不一定是y的父)。
  2. 未知:每个节点子节点的数量 。
  3. 关系:数组计数法,子节点数=边数-1(父节点)。

2.定义变量

    // 二、数据定义
    int a[110] = {};  // 初始化数组a,用于记录每个节点作为边端点的次数(视为子节点的次数)
    int n, x, y;      // n:节点总数;x, y:输入的节点对

3.输入数据

    // 三、数据输入
    cin >> n;          // 读取节点总数

    // 读取并处理节点对 (x, y),表示存在一条从节点x到节点y的边
    for (int i = 1; i < n; i++) {
        cin >> x >> y;
        a[x]++;         // 节点x参与了一条边,计数加1
        a[y]++;         // 节点y参与了一条边,计数加1
    }

4.数据计算

    // 四、数据计算
    // 对根节点(结点1)特殊处理,手动增加其作为边端点的次数1,因为根节点没有父节点
    a[1]++;

    // 输出每个节点作为边端点的次数减1,即子节点数量(按题目特殊定义)
    for (int i = 1; i <= n; i++) {
        cout << a[i] - 1 << " ";  // 输出节点i的子节点数量(按题目定义),后跟一个空格
    }

5.输出结果

完整代码如下:

#include <iostream>
using namespace std;

int main() {
    // 一、分析问题
    // 已知:一棵树中的若干父节点和子节点的关系描述 (x不一定是y的父)。
    // 未知:每个节点子节点的数量 。
    // 关系:数组计数法,子节点数=边数-1(父节点)。 

    // 二、数据定义
    int a[110] = {};  // 初始化数组a,用于记录每个节点作为边端点的次数(视为子节点的次数)
    int n, x, y;      // n:节点总数;x, y:输入的节点对

    // 三、数据输入
    cin >> n;          // 读取节点总数

    // 读取并处理节点对 (x, y),表示存在一条从节点x到节点y的边
    for (int i = 1; i < n; i++) {
        cin >> x >> y;
        a[x]++;         // 节点x参与了一条边,计数加1
        a[y]++;         // 节点y参与了一条边,计数加1
    }

    // 四、数据计算
    // 对根节点(结点1)特殊处理,手动增加其作为边端点的次数1,因为根节点没有父节点
    a[1]++;

    // 输出每个节点作为边端点的次数减1,即子节点数量(按题目特殊定义)
    for (int i = 1; i <= n; i++) {
        cout << a[i] - 1 << " ";  // 输出节点i的子节点数量(按题目定义),后跟一个空格
    }

    // 五、输出结果
    return 0;  // 程序执行完毕,返回值为0
}

问题三:1775 - 谁的孙子最多

类型:vector 树


题目描述:

给定一棵树,其中 1 号结点是根结点,问哪一个结点的孙子结点最多,有多少个。(孙子结点,就是儿子结点的儿子结点。)

输入:

第一行一个整数 N(N≤10000),表示树结点的个数。
此后 N 行,第 i 行包含一个整数Ci​,表示 i 号结点儿子结点的个数,随后共 Ci​ 个整数,分别表示一个 i 号结点的儿子结点(结点编号在1∼N 之间)。

输出:

一行两个整数,表示孙子结点最多的结点,以及其孙子结点的个数,如果有多个,输出编号最小的(本题测试数据确保有解)。

样例:

输入:

5
2 2 3
1 4
0
1 5
0

输出:

1 1

在这里插入图片描述


解题思路:

解题最重要的是读题。题目描述似乎没有太多有用的信息。因此我们将视线转移到输入中。

在这里插入图片描述

  1. 首先会输入一个整数n,n表示树结点的个数。

  2. 然后会输入n行数据,那么就需要用循环读入。每一行最少有一个整数c,c表示子结点的个数。如果c不等于0,那么还会有c个子结点被输入。因此需要考虑嵌套循环。

输入分析完成,看向输出。

在这里插入图片描述

  1. 输出只有一行,需要输出两个内容。内容1:孙子结点最多的结点,内容2:该结点的孙子结点数量。
  2. 要求如果存在有多个孙子结点数量相同的结点,优先输出编号小的。例如根结点1有3个孙子结点,结点2也有3个孙子结点,那么输出1不输出2。

分析完输入、输出后似乎还是没有完全读懂该题目。那只能从样例入手了。

在这里插入图片描述

将样例中的信息标记出来,并画出树形图。

先不考虑本题如何求解,这些数据应该如何存储呢?

  1. 首先我们考虑孩子表示法,孩子表示法直接记录了每个节点的所有子节点编号,清晰地展现了树的父子关系,便于理解和操作。对于查找某个节点的所有后代、统计子树大小、遍历子树等与子节点相关操作,孩子表示法提供了直接的访问途径,无需额外计算或遍历。
  2. 其次vector允许在运行时动态添加或删除元素,无需预先知道树的具体形态。在输入节点及其子节点信息时,可以直接使用push_back()方法将子节点编号添加到父节点对应的vector中,无需手动管理内存。vector支持通过索引来直接访问和修改元素,对于孩子表示法中的子节点列表,可以通过a[i][j]快速访问第i个节点的第j个子节点,便于进行各种基于子节点的操作。

解决了该题的存储问题如何找到孙子的数量呢?

其实这个问题已经在不知不觉中被解决了。

使用了孩子表示法来存储树结构,每个节点的子节点编号被存储在一个vector中。vector的size()方法返回该向量中元素的数量,即当前节点的子节点数。

要计算某个节点i的孙子数量,实际上是计算其所有子节点的子节点数量之和。由于您已经将每个节点的子节点信息存储在其对应的vector中,即a[i],所以可以直接通过遍历a[i]中的每一个子节点z,然后调用a[z].size()来获取子节点z的子节点数量。将所有这些子节点数量累加,即可得到节点i的孙子数量。


1.分析问题

  1. 已知:
  • 给定一棵树,其中1号结点为根结点。
  • 树中节点总数N,满足N ≤ 10000。
  • 对于每个节点i(1 ≤ i ≤ N):
    已知其儿子结点数量C_i。
    已知C_i个儿子结点的具体编号,均为1到N之间的整数。
  1. 未知:
  • 哪一个结点的孙子结点数量最多。
  • 这个结点的孙子结点数量是多少。
  1. 关系:
  • 从已知信息出发,通过遍历树结构并统计每个节点的孙子结点数量。
  • 对于每个节点i,其孙子结点数量等于其所有儿子结点的子节点数量之和。
  • 通过比较所有节点的孙子结点数量,找出孙子结点数量最多的节点及其孙子结点数量。
  • 若存在多个孙子结点数量最多的节点,选择编号最小的一个作为输出结果。

2.定义变量

声明变量 n(总节点数)、c(当前节点的儿子数)、x(儿子节点编号)、jd(孙子结点最多的节点编号)、jds(最大孙子结点数,初始值为INT_MIN)。

    // 定义变量
    int n, c, x, jd, jds = INT_MIN;

3.输入数据

读取总节点数 n,然后使用循环读取每个节点的子节点信息,将其存入二维向量 a 中。

 // 读取总节点数
    cin >> n;

    // 依次读取每个节点的子节点信息,并存入一维数组a中
    for (int i = 1; i <= n; i++) {
        // 读取当前节点的儿子数
        cin >> c;

        // 读取并存储当前节点的每个儿子节点编号
        for (int j = 0; j < c; j++) {
            cin >> x;
            a[i].push_back(x);
        }
    }

4.数据计算

遍历所有节点(编号从1到n),对于每个节点,计算其所有儿子节点的孙子结点总数(即儿子节点的子节点数量之和),如果当前节点的孙子结点总数大于之前找到的最大值,更新 jd 和 jds。

 // 计算
    // 遍历所有节点,寻找孙子结点最多的节点及其孙子结点数量
    for (int i = 1; i <= n; i++) {
        int sum = 0;

        // 对于当前节点的每个儿子节点,累加其子节点数量(即孙子结点数量)
        for (int j = 0; j < a[i].size(); j++) {
            int ind = a[i][j];
            sum += a[ind].size();
        }

        // 如果当前节点的孙子结点总数大于已知最大值,更新结果
        if (sum > jds) {
            jd = i;
            jds = sum;
        }
    }

5.输出结果

最后输出孙子结点最多的节点编号 jd 以及对应的孙子结点数 jds。

    // 输出
    // 输出孙子结点最多的节点编号及其孙子结点数量
    cout << jd << " " << jds;

完整代码如下:

#include <bits/stdc++.h>

using namespace std;
// 定义一个大小为100100的一维数组,每个元素为一个vector<int>,
// 用于存储每个节点的子节点编号
vector<int> a[100100];
int main() {


    // 定义变量
    int n, c, x, jd, jds = INT_MIN;

    // 输入
    // 读取总节点数
    cin >> n;

    // 依次读取每个节点的子节点信息,并存入一维数组a中
    for (int i = 1; i <= n; i++) {
        // 读取当前节点的儿子数
        cin >> c;

        // 读取并存储当前节点的每个儿子节点编号
        for (int j = 0; j < c; j++) {
            cin >> x;
            a[i].push_back(x);
        }
    }

    // 计算
    // 遍历所有节点,寻找孙子结点最多的节点及其孙子结点数量
    for (int i = 1; i <= n; i++) {
        int sum = 0;

        // 对于当前节点的每个儿子节点,累加其子节点数量(即孙子结点数量)
        for (int j = 0; j < a[i].size(); j++) {
            int ind = a[i][j];
            sum += a[ind].size();
        }

        // 如果当前节点的孙子结点总数大于已知最大值,更新结果
        if (sum > jds) {
            jd = i;
            jds = sum;
        }
    }

    // 输出
    // 输出孙子结点最多的节点编号及其孙子结点数量
    cout << jd << " " << jds;

    return 0;
}

问题四:1776 - 谁的孙子最多II

类型:vector 树


题目描述:

给定一棵树,其中 1 号结点是根结点,问哪一个结点的孙子结点最多,有多少个。(孙子结点,就是儿子结点的儿子结点。)

输入:

第一行一个整数 N(N≤10000),表示树结点的个数。
此后N−1 行,第 i 行包含一个整数fi​,表示 i+1 号结点的父亲。

输出:

一行两个整数,表示孙子结点最多的结点,以及其孙子结点的个数,如果有多个,输出编号最小的。

样例:

输入:

5
1
1
2
4

输出:

1 1

在这里插入图片描述


解题思路:

本题和《1775 - 谁的孙子最多》这题的内容相似,都是要找谁的孙子结点最多,那具体有什么不同呢?我们进一步研究。

还是从输入、输出入手。

在这里插入图片描述

首先输出很简单,就是要输出孙子结点最多的结点,和它的个数。定义出相关的变量即可。

输入:

  1. 首先输入一个整数n,表示结点总数。
int n;
cin>>n;
  1. 剩下n-1行,每行会输入n+1结点的父亲。
for(int i=1;i<n;i++)

老规矩,还是分析样例。

在这里插入图片描述

分析完样例后,似乎可以使用vector-父亲表示法,但是我们本题是要寻找孙子数量最多,而父亲表示法适用于需要频繁向上追溯父节点的场景,但不利于进行自底向上的遍历。

所以我们本题还是转换成孩子表示法。

如何转换?

其实当我们说一个结点是一个结点的父亲时,也可以说这个结点是另外一个结点的孩子。比如说a结点是b结点的父亲,那么我们说b结点是a结点的孩子。

样例中第二个结点的父亲是1结点,也可以说1结点的孩子是2结点。

将循环的i作为孩子,将输入的f作为父亲。

for(int i=2;i<n;i++){
	cin>>f;
	a[f].push_back(i);
}

剩下的如何处理哪个结点的孙子结点最多就和《1775 - 谁的孙子最多》一样了。


1.分析问题

  1. 已知:一棵树,它的结点信息。
  2. 未知:哪个结点的孙子结点最多,数量是多少。
  3. 关系:孩子表示法,vector。

2.定义变量

    // 定义变量
    int n, f, jd, jds = INT_MIN;

3.输入数据

    // 依次读取每个节点的父节点信息,并存入一维数组a中
    for (int i = 2; i <=n; i++) {
        // 读取当前节点的父结点 
        cin >> f;
        //转换成父结点的子结点信息。 
		a[f].push_back(i);
        
    }

4.数据计算

// 计算
    // 遍历所有节点,寻找孙子结点最多的节点及其孙子结点数量
    for (int i = 1; i <= n; i++) {
        int sum = 0;

        // 对于当前节点的每个儿子节点,累加其子节点数量(即孙子结点数量)
        for (int j = 0; j < a[i].size(); j++) {
            int ind = a[i][j];
            sum += a[ind].size();
        }

        // 如果当前节点的孙子结点总数大于已知最大值,更新结果
        if (sum > jds) {
            jd = i;
            jds = sum;
        }
    }

5.输出结果

 // 输出
    // 输出孙子结点最多的节点编号及其孙子结点数量
    cout << jd << " " << jds;

完整代码如下:

#include <bits/stdc++.h>

using namespace std;
// 定义一个大小为100100的一维数组,每个元素为一个vector<int>,
// 用于存储每个节点的子节点编号
vector<int> a[100100];
int main() {


    // 定义变量
    int n, f, jd, jds = INT_MIN;

    // 输入
    // 读取总节点数
    cin >> n;

    // 依次读取每个节点的父节点信息,并存入一维数组a中
    for (int i = 2; i <=n; i++) {
        // 读取当前节点的父结点 
        cin >> f;
        //转换成父结点的子结点信息。 
		a[f].push_back(i);
        
    }

    // 计算
    // 遍历所有节点,寻找孙子结点最多的节点及其孙子结点数量
    for (int i = 1; i <= n; i++) {
        int sum = 0;

        // 对于当前节点的每个儿子节点,累加其子节点数量(即孙子结点数量)
        for (int j = 0; j < a[i].size(); j++) {
            int ind = a[i][j];
            sum += a[ind].size();
        }

        // 如果当前节点的孙子结点总数大于已知最大值,更新结果
        if (sum > jds) {
            jd = i;
            jds = sum;
        }
    }

    // 输出
    // 输出孙子结点最多的节点编号及其孙子结点数量
    cout << jd << " " << jds;

    return 0;
}

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

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

相关文章

mysql 故障排除与优化

目录 一 mysql 逻辑架构图 二 msql单实例常见故障 1, 故障一 2, 故障二 3, 故障三 4, 故障四 5, 故障五 6, 故障六 7, 故障七 8, 故障八 三 mysql 主从环境常见故障 1, 故障一 2, 故障二 3, 故障三 四 mysq 常见优化 1&#xff0c;硬件优化…

校园二手书交易|基于springboot的校园二手书交易设计与实现(附项目源码+论文)

基于springboot校园二手书交易平台的设计与实现 目录 基于springboot校园二手书交易平台的设计与实现 一、摘要 二、相关技术 java、tomcat、mysql、spring、sprigBoot、mybatis、query、vue 三、系统设计 3.1 整体功能设计图 3.2 功能具体细节设计 四、数据库设计 五…

砍树c++

题目&#xff1a; 代码&#xff1a; #include<bits/stdc.h> using namespace std; long long n,m,a[100000005]; bool jltm(int x){long long sum0;for(int i1;i<n;i){if(a[i]>x) sumsuma[i]-x;}//计算此时锯片高度砍掉的木材if(sum>m) return 1;else return 0…

城市排涝与海绵城市教程

原文链接&#xff1a;城市排涝与海绵城市教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247599633&idx3&snbfe71e1b4f918864fdfe8e33db8a104b&chksmfa8207f6cdf58ee03dea20cc64bb106aadd729fcbf0a1ce3f920d3e767f78e53fa6a094d8d2a&token21066…

Linux_应用篇(02) 文件 I/O 基础

本章给大家介绍 Linux 应用编程中最基础的知识&#xff0c;即文件 I/O&#xff08;Input、 Outout&#xff09; &#xff0c; 文件 I/O 指的是对文件的输入/输出操作&#xff0c;说白了就是对文件的读写操作&#xff1b; Linux 下一切皆文件&#xff0c;文件作为 Linux 系统设计…

微信小程序wx.navigateTo无法跳转到Component组件问题解决。(共享元素动画必备)

关于Component构造器官方是有文档说明的&#xff0c;然后官方文档内部也给出了组件是可以通过像pages一样跳转的。但是官方文档缺少了必要的说明&#xff0c;会引起wx.navigateTo无法跳转到组件问题&#xff01; 以下是官方文档截图&#xff1a; 解决方式&#xff1a; 组件创建…

IP归属地在互联网行业中的应用

摘要&#xff1a;IP&#xff08;Internet Protocol&#xff09;地址归属地是指互联网上某个IP地址所对应的地理位置信息。在互联网行业中&#xff0c;IP归属地具有重要的应用价值&#xff0c;包括网络安全、广告定向、用户定位等方面。IP数据云将探讨IP归属地在互联网行业中的应…

解锁流量密码:自养号测评助亚马逊、shein店铺销量飙升

流量是影响一款产品销售的重要因素&#xff0c;当一款产品的流量增多&#xff0c;那么其销量也会随之增加&#xff0c;相反的&#xff0c;流量减少&#xff0c;那么销量也会随之降低。那卖家们又该如何提高店铺流量呢&#xff1f;下面我们就来分享一些提高店铺流量的方法。 无…

入门stm32单片机,0基础是怎么做到的

大家好&#xff0c;今天给大家介绍8步就能系统入门stm32单片机&#xff0c;文章末尾附有分享大家一个资料包&#xff0c;差不多150多G。里面学习内容、面经、项目都比较新也比较全&#xff01;可进群免费领取。 对于没有基础的大学生来说&#xff0c;想要系统入门STM32单片机&a…

校园招聘管理系统(源码+文档)

校园招聘管理系统&#xff08;小程序、ios、安卓都可部署&#xff09; 文件包含内容程序简要说明含有功能项目截图客户端热门岗位校园招聘首页个人简历添加个人简历我的界面注册界面查看个人简历界面个人资料界面登录界面消息界面退出登录 管理端登录界面![请添加图片描述](htt…

GLTFExporter是一个用于将3D场景导出为glTF格式的JavaScript库。

demo案例 GLTFExporter是一个用于将3D场景导出为glTF格式的JavaScript库。下面我将逐个讲解其入参、出参、属性、方法以及API使用方式。 入参&#xff08;Input Parameters&#xff09;: GLTFExporter的主要入参是要导出的场景对象和一些导出选项。具体来说&#xff1a; s…

JRT业务开发起步

这是一段充满挑战与奋斗的旅程&#xff0c;自第一行Java代码的写下起&#xff0c;便历经重重险阻。从细微的代码行&#xff0c;逐步汇聚成实用的工具类方法&#xff1b;从工具类方法的积累&#xff0c;逐渐构建起功能强大的工具包&#xff1b;再从工具包的整合&#xff0c;最终…

python Cyber_record 包 一些命令

python Cyber_record 包 1. 查看record文件的统计信息 cyber_record info -f 20231101211111.record.00005 c record_file: 20231101211111.record.00005 version: 1.0 begin_time: 2023-11-01 21:13:48.099650 end_time: 2023-11-01 21:14:19.267622 duration: 3…

jenkins手把手教你从入门到放弃01-jenkins简介(详解)

一、简介 jenkins是一个可扩展的持续集成引擎。持续集成&#xff0c;也就是通常所说的CI&#xff08;Continues Integration&#xff09;&#xff0c;可以说是现代软件技术开发的基础。持续集成是一种软件开发实践&#xff0c; 即团队开发成员经常集成他们的工作&#xff0c;通…

STM32L4R9 的 QuadSPI Flash 通讯速率不理想

1. 引言 客户反应 STM32L4R9 同 QSPI Flash 通讯&#xff0c;测出来的读取速率为 10MB/s&#xff0c; 和理论值相差较大。 2. 问题分析 按照客户的时钟配置和 STM32L4R9 的数据手册中的数据&#xff0c;OSPI 读数速率为 10MB/s 肯定存在问题。同时我们也可以在 AN4760 应用手…

SharedPreferences.Editor 中 apply 与 commit 方法的区别

在 Android 开发中&#xff0c;SharedPreferences 是我们用来存储简单键值对数据的工具。这就像是在口袋里带着一个小笔记本&#xff0c;随时记录下要点或标记。但当涉及到保存这些笔记时&#xff0c;你有两个选择&#xff1a;apply 或 commit。它们乍看之下似乎可以互换使用&a…

【SqlServer】Alwayson收缩日志

Alwayson收缩日志 压缩失败直接压缩压缩失败 直接压缩 加入高可用组之后,不能设置成简单模式。 USE [databasename] CHECKPOINT DECLARE @bakfile nvarchar(100) SET @bakfile=D:\data

DHCP服务搭建

DHCP搭建 一、DHCP简介 1、概念 DHCP&#xff08;Dynamic Host Configuration Protocol&#xff0c;动态主机配置协议&#xff09;是一种网络协议&#xff0c;用于自动分配IP地址和其他网络配置信息给网络上的设备。通过DHCP&#xff0c;计算机或其他设备可以自动获取IP地址、…

Android算法部署项目 | 在Android平台基于NCNN部署YOLOv5目标检测算法

项目应用场景 面向 Android 安卓平台使用 NCNN 部署 YOLOv5 目标检测算法&#xff0c;使用 Android Studio 进行开发&#xff0c;项目具有 App UI 界面。 项目效果&#xff1a; 项目细节 > 具体参见项目 README.md (1) 安装编译 NCNN&#xff0c;或者直接去 Releases Tenc…

深入理解鸿蒙生命周期:从应用到组件

在开发鸿蒙&#xff08;HarmonyOS&#xff09;应用时&#xff0c;理解生命周期的概念至关重要。生命周期不仅关乎应用的性能优化&#xff0c;还涉及到资源管理和用户体验等多个方面。本文将详细解析鸿蒙操作系统中应用、页面和组件的生命周期&#xff0c;帮助开发者更好地掌握这…