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

中国空间站机械臂西安seo推广

中国空间站机械臂,西安seo推广,网站名称与备案名称不一致,甘肃兰州文理学院疫情题目:3373. 连接两棵树后最大目标节点数目 II 思路:贪心深度优先搜索dfs,时间复杂度0(nm)。 第二棵树:对每个节点进行分类,0或1,相邻的节点肯定不同啦,这样就可以统计出0和1 各自的节点个数。 …

题目:3373. 连接两棵树后最大目标节点数目 II

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
思路:贪心+深度优先搜索dfs,时间复杂度0(n+m)。

第二棵树:对每个节点进行分类,0或1,相邻的节点肯定不同啦,这样就可以统计出0和1 各自的节点个数。

对于第一颗树而言,也是一样处理的,细节看注释。

C++版本:

class Solution {
public:// 构建链接表void solve(vector<vector<int>> & g,vector<vector<int>>& edges){for(auto e:edges){int x=e[0],y=e[1];g[x].push_back(y);g[y].push_back(x);}}// dfs第二棵树,统计0、1节点的个数void dfs1(int u,int fa,int d,vector<vector<int>> & g,vector<int> &cnt1){cnt1[d]++;for(auto x:g[u]){if(x==fa) continue;dfs1(x,u,d^1,g,cnt1);}}// dfs第一颗树,统计0、1节点的个数,同时用数组ans记录每个节点u所在的节点状态d(0,1)void dfs2(int u,int fa,int d,vector<vector<int>> & g,vector<int> &cnt1,vector<int> &ans){cnt1[d]++;ans[u]=d;for(auto x:g[u]){if(x==fa) continue;dfs2(x,u,d^1,g,cnt1,ans);}}vector<int> maxTargetNodes(vector<vector<int>>& edges1, vector<vector<int>>& edges2) {// 构建链接表int n=edges1.size(),m=edges2.size();vector<vector<int>> g1(n+1),g2(m+1);solve(g1,edges1);solve(g2,edges2);// 统计0、1节点的个数vector<int> cnt1(2,0);// 先dfs第二棵树dfs1(0,-1,0,g2,cnt1);// 找出最大的类别用于和第一颗树的节点相连// 注意m是大于等于2的,所以一定会有一个类别最大。不存在m=1的情况,导致出问题int mx=max(cnt1[0],cnt1[1]);// 答案vector<int> ans(n+1,0);// 初始化,用于记录第一颗树的0、1节点的个数cnt1[0]=0,cnt1[1]=0;// dfs第二棵树dfs2(0,-1,0,g1,cnt1,ans);for(int i=0;i<=n;i++){ans[i]=cnt1[ans[i]]+mx;}return ans;}
};

JAVA版本:

class Solution {void solve(List<List<Integer>> g,int[][] edges){for(var e:edges){int x=e[0],y=e[1];g.get(x).add(y);g.get(y).add(x);}}void dfs1(int u,int fa,int d,List<List<Integer>> g,int[] cnt1){cnt1[d]++;for(var x:g.get(u)){if(x==fa) continue;dfs1(x,u,d^1,g,cnt1);}}void dfs2(int u,int fa,int d,List<List<Integer>> g,int[] cnt1,int[] ans){cnt1[d]++;ans[u]=d;for(var x:g.get(u)){if(x==fa) continue;dfs2(x,u,d^1,g,cnt1,ans);}}public int[] maxTargetNodes(int[][] edges1, int[][] edges2) {int n=edges1.length,m=edges2.length;List<List<Integer>> g1=new ArrayList<>();List<List<Integer>> g2=new ArrayList<>();for(int i=0;i<=n;i++){g1.add(new ArrayList<>());}for(int i=0;i<=m;i++){g2.add(new ArrayList<>());}solve(g1,edges1);solve(g2,edges2);int[] cnt1=new int[2];dfs1(0,-1,0,g2,cnt1);int mx=Math.max(cnt1[0],cnt1[1]);int[] ans=new int[n+1];cnt1[0]=0;cnt1[1]=0;dfs2(0,-1,0,g1,cnt1,ans);for(int i=0;i<=n;i++){ans[i]=cnt1[ans[i]]+mx;}return ans;}
}

Go版本:

func maxTargetNodes(edges1 [][]int, edges2 [][]int) []int {n:=len(edges1)m:=len(edges2)g1:=make([][]int,n+1)g2:=make([][]int,m+1)solve(edges1,g1)solve(edges2,g2)cnt:=make([]int,2)dfs1(0,-1,0,g2,cnt)mx:=max(cnt[0],cnt[1])cnt[0],cnt[1]=0,0ans:=make([]int,n+1)dfs2(0,-1,0,g1,cnt,ans)for i:=0;i<=n;i++ {ans[i]=cnt[ans[i]]+mx}return ans
}func solve(edges [][]int,g [][]int) {for _,e:= range edges {x,y:=e[0],e[1]g[x]=append(g[x],y)g[y]=append(g[y],x)}
}func dfs1(u int,fa int,d int,g [][]int,cnt []int){cnt[d]++for _,x:=range g[u] {if x!=fa {dfs1(x,u,d^1,g,cnt)}}
}
func dfs2(u int,fa int,d int,g [][]int,cnt []int,ans []int){ans[u]=dcnt[d]++for _,x:=range g[u] {if x!=fa {dfs2(x,u,d^1,g,cnt,ans)}}
}
http://www.dtcms.com/wzjs/250465.html

相关文章:

  • 网站如何做关键词seo优化关键词优化骗局
  • 微信做网站的弊端百度图片搜索引擎
  • 班级网站源代码下载深圳网站关键词优化推广
  • 网站域名实名认证查询目前最新的营销方式有哪些
  • 五莲网站建设西安百度快照优化
  • 做家教网站的资源是什么seo关键词排行优化教程
  • 西安网站建设开发公司广告公司品牌营销推广
  • 网站空间到期时间查询网络优化大师app
  • 互动性的网站网站规划与设计
  • windows搭建php网站百度下载应用
  • 外贸高端网站开发杭州seo推广优化公司
  • 怎样做网站后台运营友情链接平台站长资源
  • 简历怎么写长沙优化科技有限公司正规吗
  • 网站上图怎么用ps做小程序拉新推广平台
  • 贵阳专业做网站公司有哪些seo推广方法
  • 微信公众号文章怎么转wordpress147seo工具
  • 网站如何做排名靠前最近发生的重大新闻事件
  • 什么系统做购物网站好优化网站关键词优化
  • 网站建设的重要性意义与价值外链代发2分一条
  • wordpress 文件下载长沙seo优化排名
  • 做网站广告中敏感词会涉及到工商软文案例大全300字
  • 邢台网站制作哪家好西安关键词优化平台
  • 做化工哪个网站好刷粉网站推广免费
  • 扫二维码直接进入网站怎么做免费推广app软件下载
  • 亚马逊是b2b电子商务网站吗如何在各大网站发布信息
  • 建设工程法律网站腾讯企业邮箱登录入口
  • 淮安做网站seo合肥百度推广优化排名
  • 网站登陆页面怎么做柳州今日头条新闻
  • 怎么做区块链网站我想做百度推广
  • 做网站用哪个电脑跨境电商平台推广