无根树转化为有根数

2023-12-28 07:18
文章标签 转化 根数 无根树

本文主要是介绍无根树转化为有根数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

输入n个节点的无根树的各条边,指定一个节点为根,将无根树转为有根树。



伪代码:

int fa[maxn];   //每个节点的父亲 
vector<int> G[maxn];
int dfs(int f)      //无根树化为有根树 
{int i;for(i=0; i<G[f].size(); i++){if(fa[f] != G[f][i]){fa[G[f][i]] = f; dfs(G[f][i]);}}
}


代码:

#include <iostream>
#include <vector>
using namespace std;const int MAXN = 1000;
int n, p[MAXN];
vector<int> G[MAXN];void dfs(int u, int fa) {   //递归转化为以u为根的子树,u的父亲为faint d = G[u].size();        //节点u的相邻点的个数for(int i = 0; i < d; ++i) {    //循环遍历跟这个节点相连接的d个节点。int v = G[u][i];       //节点u的第i个相邻点vif(fa != v) dfs(v, p[v] = u);  //把v的父亲节点设为u,然后递归转化为以v为根的子树//一定要判断v是否和其父亲节点相等!}
}int main() {cin >> n;for(int i = 0; i < n-1; i++) {   //输入n-1条边int u, v;cin >> u >> v;G[u].push_back(v);G[v].push_back(u);}int root;   cin >> root;    //指定根节点。p[root] = -1;   //设定根节点的父亲节点为-1,代表根节点没有父亲节点。dfs(root, -1);for(int i = 0; i < n; ++i) {cout << p[i] << endl;}return 0;
}


这篇关于无根树转化为有根数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/545314

相关文章

usaco 1.2 Palindromic Squares(进制转化)

考察进制转化 注意一些细节就可以了 直接上代码: /*ID: who jayLANG: C++TASK: palsquare*/#include<stdio.h>int x[20],xlen,y[20],ylen,B;void change(int n){int m;m=n;xlen=0;while(m){x[++xlen]=m%B;m/=B;}m=n*n;ylen=0;whi

usaco 1.2 Name That Number(数字字母转化)

巧妙的利用code[b[0]-'A'] 将字符ABC...Z转换为数字 需要注意的是重新开一个数组 c [ ] 存储字符串 应人为的在末尾附上 ‘ \ 0 ’ 详见代码: /*ID: who jayLANG: C++TASK: namenum*/#include<stdio.h>#include<string.h>int main(){FILE *fin = fopen (

5.1声道转化为左右声道

5.1声道转化为左右声道downmix http://szfzafa.blog.163.com/blog/static/11895416720120724729214/ 标题: Downmix 5.1ch to 2ch in AVS   最简单: function Dmix6Stereo(clip a) {  # 6 Channels L,R,C,LFE,SL,SR   f

关于字符串转化为数字的深度优化两种算法

最近在做项目,在实际操作中发现自己在VC环境下写的字符串转化为整型的函数还是太过理想化了,或者说只能在window平台下软件环境中运行,重新给大家发两种函数方法: 第一个,就是理想化的函数,在VC环境下充分利用指针的优越性,对字符串转化为整型(同时也回答了某位网友的答案吖),实验检验通过: #include <stdio.h> #include <string.h> int rayatoi(c

通过C语言将文法转化为语言

最近在学习编译原理,在做一道题时,突然产生想法,想通过C语言将文法产生的语言表现出来。   题目如下:   给定文法:S::=aB|bA                     A::=aS|bAA|a                     B::=bS|aBB|b   该文法所产生的语言是什么?   程序如下,可以注意相关的程序注解 #include<stdio.h> #in

Oracle之用TO_CHAR函数将日期格式转化为不带前导零的月份和日

要求: 1、日期格式转化成字符串格式,月和日前面的0需要去掉,如日期2024-09-06需要转化成2024-9-6; 2、如果用截取拼接函数写法就会复杂,最好用TO_CHAR函数格式化实现。 正确写法: SELECT TO_CHAR(SYSDATE,'YYYY-fmMM-dd') AS DATE1 , -- 执行结果为 2024-9-6TO_CHAR(SYSDATE,'fmYYYY-MM-d

jks bks 等的定义 如何将jks转化为bks的

接着上一篇,文中提到的android不和java一样识别jks,所以我们要将其转化成bks这里面我们就系统的介绍下到底该如何去生成jks,bks等等 常用的证书密钥库格式: BKS来自BouncyCastleProvider,它使用的也是TripleDES来保护密钥库中的Key,它能够防止证书库被不小心修改(Keystore的keyentry改掉1个bit都会产生错误),BKS能够跟JKS互操

有符号和无符号的转化

1.无符号转有符号 测试结果: 2.有符号转换为无符号数 测试结果: 其他

数据标注:PascalVOC模式到YOLO模式的一键转化

import osimport xml.etree.ElementTree as ETfrom decimal import Decimaldirpath = 'E:\\0911-0951最后一个文件夹\\20190215-211313 {3D675E7F-B913-41B0-B915-9381A662A919}(SHDT-0916(A))\\ZXB_LC01D\\xml' # 原来存放xm