当前位置: 首页 > wzjs >正文

嘉兴模板开发建站制作相册影集下载

嘉兴模板开发建站,制作相册影集下载,重庆人居建设集团网站,it彩票网站建设维护工程师树的一种特殊的图,无环连通图 图还分为有向图,无向图 但是无向图其实也是特殊的有向图 (a指向b,b也指向a,每个连接节点都如此,则是无向图) 那我们只需要讨论有向图 有向图的分类 邻接矩阵 …

树的一种特殊的图,无环连通图

图还分为有向图,无向图

但是无向图其实也是特殊的有向图 (a指向b,b也指向a,每个连接节点都如此,则是无向图)

那我们只需要讨论有向图

有向图的分类

邻接矩阵

开一个二维数组,g[a][b],存储a->b的信息,存储的就是是否连通 ,如有权重,存储的就是权重

缺点,空间复杂度是n的平方

邻接表

邻接表类似于单链表,实际上就是每个点,都存储一个单链表

单链表指向自己可以走向哪些点

例如下图的有向图

在邻接表中,如下

1->3->4->null

2->1->4->null

3->4->null

4->null

添加节点,代码实现如下
#include<iostream>
using namespace std;
const int N = 100010,M = N*2;
int h[N];//所有头,每个节点都自己为一个链表头
int e[M],ne[M],idx;//每个节点和其指向的其他节点,组成链表
void add(int a,int b){//将b加入a为头节点的链表e[idx]=b;//先把b放入ne[idx]=h[a];//然后b的指针,和头节点指向同一个节点h[a]=idx;//头结点指向bidx++;//方便下次调用idx直接用
}
int main(){memset(h,-1,sizeof h);
}
遍历邻接表

例如遍历下图邻接表

例如我们从A开始遍历,只遍历单链表,我们能得到下图

如果想得到完整表

我们可以在遍历单链表时,遍历每个节点,作为头结点的单链表,有哪些节点

因为每个节点作为头结点时,存储了他所相连的所有节点

推导出A的相邻节点,和A的相邻节点的相邻节点,和和A的相邻节点的相邻节点的相邻节点....

我们也就推出了整个邻接表

在代码实现中,为了防止重复遍历,记得标记一下已经做过头结点的表

#include<iostream>
using namespace std;
const int N = 100010,M = N*2;
int h[N];//所有头,每个节点都自己为一个链表头
int e[M],ne[M],idx;//每个节点和其指向的其他节点,组成链表
bool st[N];//记录st[i]的i是否被遍历过void add(int a,int b){//将b加入a为头节点的链表e[idx]=b;//先把b放入ne[idx]=h[a];//然后b的指针,和头节点指向同一个节点h[a]=idx;//头结点指向bidx++;//方便下次调用idx直接用
}void dfs(int u){//查看u下的链表st[u] = true;//标记u曾作为头结点,被遍历了for(int i=h[u];i!=-1;i=ne[i]){//查看u作为头结点的单链表上的所有节点int j = e[i];//从第二个节点开始查看//从第二个节点开始,递归链表上所有节点,使其当做头结点if(!st[j])dfs(j);//遍历其他未被遍历节点,各自为头节点的单链表}
}
int main(){memset(h,-1,sizeof h);dfs(1);//遍历链表头1
}

树的重心

题目

给定一颗树,树中包含n个节点(编号1~n)和n-1条无向边。
请你找到树的重心,并输出将重心删除后,剩余各个连通块中点数的最大值。
重心定义:重心是指树中的一个节点,如果将这个点删除后,剩余各个连通块中点数的最大值最小,那么这个节点被称为树的重心。

【输入格式】
第一行包含整数n,表示树的节点数。1≤n10e5
接下来n-1行,每行包含两个整数a和b,表示点a和点b之间存在一条边。

【输出格式】
输出一个整数m,表示将重心删除后,剩余各个连通块中点数的最大值。

分析题目要求

假设题目中要删除的点为U

在树中任意删除一节点U,剩下的数量值最大的连通块的数量为M

题目中是求,如何取节点U,使得M的值最小

则U就为重心,M为要输出的值

推测

若我们能求出每个U被删除后,所对应的最大M,然后比较每个U的M谁更大

则就可以求出U,进而同时,已经求出M

而要求出任意一点U的最大M,我们可以用U把整个连通块分成两个部分

u以及u以下的节点,是一个部分,u以上的节点,是一个部分

u作为头节点

使用邻接表可以推导出u下面(不含u)所有节点的最大连通块大小,我们将其设为s

我们取出最大的s,保存为size

size就是u被删除后,u以下的子节点的最大的连通块的数量值
而所有子节点的s,加上u本身(1个节点),就是u以及u以下连通块的节点数量

所以我们以u为根的节点数量值为sum

因为这是一个树,初始所有节点都联通,而且不会出现循环节点,例如A->B,B->C,C->A这种情况

而且n为所有连通块的数量,可得,n-sum,为u以上父节点,连通块最大数量

要么是u的父节点组成的连通块大,要么是u的最大一个子树,组成的连通块大

那我们求ans=max(size,n-sum),ans,就是删除u节点后,剩余最大的连通块的值

那我们再循环求出每个u对应的ans,即得出此题答案

size;//记录u的最大子树的节点数量
sum;//记录以u为根的树的节点数量
n-sun;//记录,记录删除u以及u以下所有节点,还剩余多少节点数量
ans=max(size,n-sum);//记录删除u节点,剩下的最大的连通块的连通节点的数量

完整代码

#include<iostream>
#include<cmath>
#include<bits/stdc++.h>
using namespace std;
const int N = 100010,M = N*2;
int h[N];//所有头,每个节点都自己为一个链表头
int e[M],ne[M],idx;//每个节点和其指向的其他节点,组成链表,所以得用两倍的N
bool st[N];//记录st[i]的i是否被遍历过
int ans = N;//记录删除u节点,剩下的最大的连通块的连通节点的数量
int n;
void add(int a,int b){//将b加入a为头节点的链表e[idx]=b;//先把b放入ne[idx]=h[a];//然后b的指针,和头节点指向同一个节点h[a]=idx;//头结点指向bidx++;//方便下次调用idx直接用
}int dfs(int u){//返回以u为根的子树中节点的个数st[u]=1;//标记此单链表头节点已经被使用int size = 0;//记录u的最大子树的节点数量int sum = 1;//记录以u为根的树的节点数量for(int i=h[u];i!=-1;i=ne[i]){int j = e[i];//从头结以外的节点开始if(!st[j]){//作为头节点,没被查找过int s=dfs(j);//递归求出每个节点sum+=s;//累加,求出以u为根的树的节点数量size=max(s,size);//保留最大的子树的连通节点数量}}//比较每个u删除后,剩余最大连通节点的数量,保留最小的那个ans=min(ans,max(n-sum,size));//n-sun记录删除u以及u以下所有节点,还剩余多少节点数量return sum;//返回u为根的树的节点数量
}
int main(){memset(h,-1,sizeof h);//每一个节点,都是单链表头节点,初始都指向-1cin>>n;for(int i=0;i<n-1;i++){int a,b;cin>>a>>b;//无向图,所以都加上add(a,b);add(b,a);//父节点都被st[]标记了,所以不会遍历到父节点}dfs(1);//遍历链表头1开始,因为树是全部都连接在一起的,所以相当于遍历了所有节点cout<<ans;
}


文章转载自:

http://MHBruEvy.fzqfb.cn
http://ojqA6XAH.fzqfb.cn
http://P5833HCV.fzqfb.cn
http://V7XVpf6z.fzqfb.cn
http://zLOAT4Uh.fzqfb.cn
http://Tat5DSNt.fzqfb.cn
http://ipnSclpa.fzqfb.cn
http://QqfN89eg.fzqfb.cn
http://oH4e4Vrr.fzqfb.cn
http://eNsksdni.fzqfb.cn
http://jgppjKo4.fzqfb.cn
http://hgq3mqjK.fzqfb.cn
http://ABo7NQ5U.fzqfb.cn
http://DOaDzYo2.fzqfb.cn
http://qMppmF1Q.fzqfb.cn
http://fZuwTEal.fzqfb.cn
http://4XOySLR7.fzqfb.cn
http://VprbGG4m.fzqfb.cn
http://2l3qZUNU.fzqfb.cn
http://7rWZBBmy.fzqfb.cn
http://8kkc6H2A.fzqfb.cn
http://gw4Xwv00.fzqfb.cn
http://3NLAVEkz.fzqfb.cn
http://lMsFgeaM.fzqfb.cn
http://4ladjAeb.fzqfb.cn
http://6fMGPWLZ.fzqfb.cn
http://nesG1pJk.fzqfb.cn
http://lw4Y2lNi.fzqfb.cn
http://JyxUdBzR.fzqfb.cn
http://ls9yyg1C.fzqfb.cn
http://www.dtcms.com/wzjs/776386.html

相关文章:

  • 自己做的网站给人攻击了怎么办郑州网站竞价托管
  • 营销型网站制作最新网推项目
  • 江西省住房建设厅网站全球最火的十大游戏
  • 想学网站建设 如何开始广告 网站
  • 怎么做网站的优化排名百度在线扫一扫
  • 网站开发美学自然志wordpress下载
  • 2003总是说网站建设中网站代运营多少钱
  • 临沂网站制作公司哪家好设计师联盟
  • 厦门建设局网站技227司学校小程序装修页面设计
  • 广州购物网站建设页面设计元素
  • 学校html网站模板代码如何制作自己的作品集
  • 吴江区经济开发区规建设局网站wordpress 调用分类目录下的文章
  • 阜阳建设网站公司电话尚义网站建设wl17581
  • 十大中文网站排名大学校园网络设计方案
  • 网站大全全部网站建设的系统分析
  • 企业网站托管方案内容具体有哪些网络域名是什么意思
  • html手机版网站做3ds磁铁卡网站
  • 做外卖在哪个网站做好h5特效网站欣赏
  • 网站运营模式长尾词seo排名优化
  • 住房和城乡建设部的网站做服装外单的网站
  • 网站空间在哪买好购物网站排名2015
  • 规划网站的总结吉林长春有做网站的吗
  • 网站推广的工具( )南通网站建设果尔
  • 设计网站做什么内容好广州抖音推广
  • 美的网站建设水平swot分析app的设计
  • 青岛哪家做网站的公司莱芜搬家公司电话
  • wordpress movies themes旺道seo软件
  • 微信平台与微网站开发h5免费制作平台火蚁邀请函怎么写
  • 网站设计报价怎么做网站主机查询
  • psd网站首页图片安徽元鼎建设工程 网站