第20期:图论模型与算法——再谈树

news/2024/7/15 20:15:02 标签: 图论, 算法, 数据结构

1 无根树转有根树

问题:输入一个n个结点的无根树的各条边,并指定一个根结点,要求把该树转化为有根树,输出各个结点的父结点编号。n\leqslant 10^{6}

用vector数组存边

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+100;
vector<int> G[maxn];
int n,root;
int p[maxn];
//vector数组存无根树 
void read_tree(){
	int u,v;
	scanf("%d",&n);//n为边数 
	for(int i=0;i<n;i++){
		scanf("%d%d",&u,&v);
		G[u].push_back(v);
		G[v].push_back(u); 
	}
}
//转化过程
void dfs(int u,int fa){//递归转化为以u为根的子树,u的父结点为fa
	int d=G[u].size();//结点u的相邻点个数 
	for(int i=0;i<d;i++){
		int v=G[u][i];//结点u的第i个相邻点v
		if(v!=fa) dfs(v,p[v]=u);//把v的父结点设为u,然后递归转化为v为根的子树 
	} 
} 
int main(){
	read_tree();
	cin>>root;//输入根结点的值
	p[root]=-1;
	dfs(root,-1);
	for(int i=1;i<=n;i++){
		cout<<i<<"的父结点编号:"<<p[i]<<endl;
	} 
	return 0;
} 
/*
7
0 1
0 2
0 3
1 4
1 5
5 6
5 7
1
1的父结点编号:-1
2的父结点编号:0
3的父结点编号:0
4的父结点编号:1
5的父结点编号:1
6的父结点编号:5
7的父结点编号:5
*/ 

2. 表达式树

待补


http://www.niftyadmin.cn/n/575809.html

相关文章

第21期:图论模型与算法——最小生成树(MST)

1. Kruskal算法 const int maxn1e6; int n,m;//点数&#xff0c;边数 int u[maxn],v[maxn],w[maxn];//第i条边的两个端点序号和权值 int r[maxn];//排序后第i小的边的序号 int cmp(const int i,const int j){ return w[i]<w[j]; }//间接比较函数 int find(int x){//并查集…

软件目录结构规范

foo/ bin/ #存放项目的一些可执行文件&#xff0c;当然你可以起名script/之类也可 foo foo/ #存放项目源代码 1,源代码中所有模块、包都应该放在此目录。不要置于顶层目录 tests/ # 2,其子目录tests/ 存放单元测试代码 3&#xff0c…

第22期:图论——最短路

1. Dijkstra算法 适用范围&#xff1a;计算正权图上的单源最短路&#xff08;Single-Source Shortest Paths,SSSP&#xff09;。同时适用于有向图和无向图。 模板题&#xff1a;P4779 【模板】单源最短路径&#xff08;标准版&#xff09; #include<bits/stdc.h> usin…

Java面向对象编程(一)

由于常常将Java和C面向对象编程的原则搞乱&#xff0c;所以这次把相关要点分别总结一下&#xff0c;本文主要总结Java面向对象编程。面向对象编程的三大特性是&#xff1a;继承性(inheritance), 多态性(polymorphism)和封装性(encapsulation)。 一. 继承性 [类修饰词列表] clas…

第23期:dp——DAG上的动态规划

有向无环图上的动态规划是学习动态规划的基础&#xff0c;很多问题都可以转化为DAG上的最长路、最短路或路径计数问题。 1. DAG模型 嵌套矩形问题 硬币问题 2. 最长路及其字典序 3. 固定终点的最长路和最短路

tmux安装

tmux是一个优秀的终端复用软件&#xff0c;类似GNU Screen&#xff0c;但来自于OpenBSD&#xff0c;採用BSD授权。使用它最直观的优点就是&#xff0c;通过一个终端登录远程主机并执行tmux后。在当中能够开启多个控制台而无需再“浪费”多余的终端来连接这台远程主机。&#xf…

第24期:dp——多段图的最短路

1 UVA116 单向TSP Unidirectional TSP 设置状态&#xff1a;设d(i,j)为从格子(i,j)出发到最后一列的最小开销。 在满足最优性的前提下&#xff0c;在计算d(i,j)的同时记录“下一列的行号”的最小值。 #include<bits/stdc.h> using namespace std; const int INF0x7fff…

二扩域中的运算、异或与同或

二扩域GF(2m)中&#xff0c;通常用异或定义加法&#xff08;&#xff09;。与此同时&#xff0c;在部分数学软件中&#xff0c;出于减少习惯错误的考虑&#xff0c;减法被当成和加法一样 处理。 其实&#xff0c;异或相对的运算是同或&#xff0c;应当用同或来表征减法&#xf…