PAT Deepest Root -并查集+树的直径

SAP SD RRB实战:从DIP参数文件到DP90/DP91开票的完整链路解析 本文详细解析了SAP SD模块中RRB(Resource-related Billing)业务场景的完整链路,从DIP参数文件配置到DP90/DP91开票操作。通过实战案例分享DIP参数文件的核心配置技巧、特性设置及物料决定要点,帮助用户掌握动态开票的关键技术,提升SAP SD RRB的实施效率。 阅读详情

题目链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805482919673856

1021 Deepest Root (25)(25 分)

A graph which is connected and acyclic can be considered a tree. The height of the tree depends on the selected root. Now you are supposed to find the root that results in a highest tree. Such a root is called the deepest root.

Input Specification:

Each input file contains one test case. For each case, the first line contains a positive integer N (<=10000) which is the number of nodes, and hence the nodes are numbered from 1 to N. Then N-1 lines follow, each describes an edge by given the two adjacent nodes' numbers.

Output Specification:

For each test case, print each of the deepest roots in a line. If such a root is not unique, print them in increasing order of their numbers. In case that the given graph is not a tree, print "Error: K components" where K is the number of connected components in the graph.

Sample Input 1:

5
1 2
1 3
1 4
2 5

Sample Output 1:

3
4
5

Sample Input 2:

5
1 3
1 4
2 5
3 4

Sample Output 2:

Error: 2 components

#include<iostream>
#include<stdio.h>
#include<stack>
#include<cstring>
#include<queue>
#include<set>
#include<algorithm>
using namespace std;
#define maxn 10001
int head[maxn],tree[maxn],dis[maxn],vis[maxn];
int num=1,start,ends,mx=0;
set<int> sett;
queue<int> que;

struct node{
    int to;
    int next;
}edge[maxn];

int findR(int a){
    if(tree[a]==-1) return a;//如果a是根节点的话
    else{
        int temp=findR(tree[a]);
        tree[a]=temp;
        return temp;//并且有压缩的过程
    }
}

void addEdge(int from,int to){
    edge[num].to=to;
    edge[num].next=head[from];//from表示的是从那条边开始,to是这条边到达哪个点
    head[from]=num++;//前叉式链表,head表示的是从当前点出发最后插入的那条边的编号
}

void bfs(int u){
    memset(vis,0,sizeof(vis));
    memset(dis,0,sizeof(dis));
    que.push(u);
    vis[u]=1;

    while(!que.empty()){
        u=que.front();que.pop();
        for(int i=head[u];i!=-1;i=edge[i].next){
            int v=edge[i].to;
            if(!vis[v]){
                int m=dis[u]+1;
                dis[v]=m;
                if(m>mx){
                    //start=u;
                    sett.clear();
                    sett.insert(v);
                    mx=m;
                }else if(m==mx){
                    sett.insert(v);
                }
            que.push(v);
            vis[v]=1;
            }
        }
    }
}

int main()
{
//freopen("1.txt","r",stdin);
    memset(tree,-1,sizeof(tree));
    memset(head,-1,sizeof(head));
    int n;
    cin>>n;
    int f,t;
    for(int i=0;i<n-1;i++){
        cin>>f>>t;
        addEdge(f,t);
        addEdge(t,f);
        int fr=findR(f);
        int tr=findR(t);
        if(fr!=tr) tree[fr]=tr;
    }

//    for(int i=1;i<=n;i++){
//        cout<<head[i]<<' '<<edge[i].next<<'\n';
//    }

    int comp=0;
    for(int i=1;i<=n;i++){
        if(tree[i]==-1)comp++;
    }
    if(comp==1){//那么此时才进行查找树的直径
        //使用bfs
        bfs(1);
        int labe;
        //从set中任取一点进行访问一次,那么很有可能只能得到两个点,另一个相同地位的点得不到。
        for(set<int>::iterator it=sett.begin();it!=sett.end();it++){
            labe=*it;
            bfs(*it);break;
        }
        for(set<int>::iterator i=sett.begin();i!=sett.end();i++){
            if(*i!=labe){
                bfs(*i);break;
            }
        }
        //sett.insert(labe);
        for(set<int>::iterator i=sett.begin();i!=sett.end();i++){
            cout<<*i<<'\n';
        }
    }else{
        cout<<"Error: "<<comp<<" components";
    }
    return 0;
}

//先这样吧,整了3h,已经懵了。

get_seed协议 【代码】get_seed协议。 阅读详情

相关推荐

解决Unity与3DMax模型单位与中心点偏差的完整指南

本文详细解析了Unity与3DMax模型导入时常见的单位与中心点偏差问题,提供了从3DMax单位设置、FBX导出到Unity接收调整的完整解决方案。通过实战案例和高效工作流建议,帮助开发者实现unity与3dmax的单位统一,避免尺寸错误和轴心偏移,提升3D资源导入效率。

weixin_29015899的博客 286

PAT——A1021 Deepest Root(图的遍历 并查集)

题目链接 #include&lt;cstdio&gt; #include&lt;iostream&gt; #include&lt;map&gt; #include&lt;set&gt; #include&lt;cstring&gt; #include&lt;algorithm&gt; #include&lt;cmath&gt; #include&lt;vector&gt; us

ZMST的博客 444

图像去雾新思路:手把手教你复现DEA-Net中的“细节增强卷积”与PyTorch实现

本文详细解析了DEA-Net中的'细节增强卷积'(DEConv)与PyTorch实现,通过多分支差分卷积和重参数化技术,显著提升单图像去雾效果。文章从数学原理到代码实现,手把手指导复现这一创新架构,帮助开发者在保持轻量化的同时实现41dB以上的PSNR指标,适用于自动驾驶、遥感监测等关键领域。

weixin_30323631的博客 505

PAT(甲)1021 Deepest Root (25)(详解)

1021 Deepest Root (25)(25 分) 题目描述: A graph which is connected and acyclic can be considered a tree. The height of the tree depends on the selected root. Now you are supposed to find the root that...

Invokar的博客 1564

CAN收发器选型避坑指南:TJA1051T与TJA1051T/3的硬件兼容性问题实录

本文详细解析了CAN收发器TJA1051T与TJA1051T/3的硬件兼容性问题,通过实测数据和故障案例揭示了VIO引脚的关键差异及其对系统的影响。提供从选型到验证的完整防坑方案,帮助开发者避免常见设计错误,确保CAN总线通信的稳定性。

weixin_42715608的博客 457

SLAM算法的优缺点

SLAM(Simultaneous Localization and Mapping,同时定位与地图构建)算法是一种通过传感器数据实时估计机器人自身位置和构建环境地图的技术。

selenia8860的博客 2906

PAT练习题 P1021 Deepest Root (25分)【并查集+图的遍历】

传送门:P1021 Deepest Root (25分) A graph which is connected and acyclic can be considered a tree. The height of the tree depends on the selected root. Now you are supposed to find the root that result...

Waiting For You 252

生信实战|EffectorP3.0在植物病原菌效应子预测中的高效应用

本文详细介绍了EffectorP 3.0在植物病原菌效应子预测中的高效应用。通过机器学习模型,该工具能快速从海量分泌蛋白中批量预测胞质与质外体效应子,显著提升研究效率。文章提供了从环境配置、RNA-seq数据处理到批量预测的完整实战流程,并分享了结果解读与避坑指南,是生信研究人员进行病原物效应子鉴定的必备利器。

weixin_29195615的博客 302

PAT Deepest Root

Deepest Root (25)时间限制 1000 ms 内存限制 65536 KB 代码长度限制 100 KB 判断程序 Standard (来自 小小)题目描述A graph which is connected and acyclic can be considered a tree. The height of the tree depends on the selected root...

qq_30339595的博客 218

18-XLINX的XC7A100T的BANK0引脚说明

DXP_0和 DXN_0是纯输入引脚,Xilinx Artix-7 FPGA 内部集成的一个片上监控模数转换器​ 的差分模拟输入对,模数转换器​的模拟信号输入端,将外部的模拟电压​ 采样并转换为内部的数字值,是一个单向的信号采集过程。它是与 VCCADC配对的关键引脚,共同为内部的精密模数转换器提供一个纯净、安静、独立的参考地平面。多FPGA同步配置: 在多FPGA系统中,主FPGA配置完成后,可以拉低从FPGA的 INIT_B使其等待,等所有FPGA都准备好后,再同时释放,实现同步启动。

weixin_44479192的博客 232

YOLO11改进策略【独家融合改进】| EfficientViMBlock + LGAG + DySample

通过学习采样来学习上采样DySample。

Limiiiing的博客 363

【PAT】 Deepest Root (DFS)

【PAT】 Deepest Root (DFS) A graph which is connected and acyclic can be considered a tree. The height of the tree depends on the selected root. Now you are supposed to find the root that results

ACMer' 3347

税务某局 webpack 登录接口逆向分析

我们再回到接口逻辑去看一下,发现每次请求前,还有两个接口,getpublickey和sendsm4,这里分析了一下调用逻辑,sm4这个接口用到一个参数是由publickey返回的一个参数而来,这个参数又经过内部加密处理,我们找到这个参数加密的地方,大概是在这个位置。我们还是顺着逻辑将加载器扣下来,然后用一个变量去接收,有了加载器,我们直接把加密代码扣下来做下处理,把一些用到的参数整理下如下。打上断点分析后,_utils_getuuid这个很长的变量也是加载器的一个函数,我们将这段代码也扣下来,如下。

码王吴彦祖的博客 402

PAT 1021 Deepest Root(树的直径+BFS+并查集)

题目https://www.patest.cn/contests/pat-a-practise/1021 题意:给出一张图,判断该图能否形成一棵树,若能则求出树的最长简单路(树的直径),否则求出连通分量的个数。 解题思路本题是树的直径+并查集的应用,似乎是某C9的机试题之一。解决这道题的整体思路是: 1. 先通过并查集判断连通分量的个数,若连通分量只有1个就说明不存在森林; 2. 对剩下

Lecholin的博客 450

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【PAT 甲级】1021 Deepest Root

1021 Deepest Root

AmiaYukiAchami的博客 703

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

PAT甲级1021. Deepest Root (25)

A graph which is connected and acyclic can be considered a tree. The height of the tree depends on the selected root. Now you are supposed to find the root that results in a highest tree. Such a root i

liaotl10的博客 541

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

PAT_A1021题解:The Deepest Root

先选择任意一个节点,从该节点来遍历整棵树,获取能达到的最深顶点的集合(记为A),然后从集合A中任意一个节点出发遍历整棵树,获取能达到的最深顶点的集合(记为B)。同理,如果第一次遍历的结点在P的左侧(或Q的右侧),则最深节点一定是B1~Bk(或是A1~Am),这样在第二次遍历时,任取一个根节点即可遍历完整另外一侧所有的最深结点。若如此,则会存在一条更长的直径XZ,WY,这与直径的定义相矛盾,因此假设不成立。所以:从任意结点X进行树的遍历,得到的最深结点一定是R或者L,即所求根节点的一部分。

m0_61150571的博客 1229

【PAT - 甲级1021】Deepest Root (25分)(并查集,暴力枚举)

题干: A graph which is connected and acyclic can be considered a tree. The height of the tree depends on the selected root. Now you are supposed to find the root that results in a highest tree. Such a ...

xuanweiace的博客 4821

PAT 甲级 1021 Deepest Root (25 分)

题意:找到能让树的深度最深的结点,若不唯一,升序输出。如果给出的图不连通,输出联通块的个数。 思路:并查集+求树的直径。 求出树最深是多少,然后每个结点dfs一次,如果等于那个最深的深度, 如果等于那个最深的深度就输出。 代码: include<iostream> #include<cstring> #include<cstdio> #include<al...

smilng的博客 283

PAT1021(Deepest Root)

(参考树的直径的求法,两遍dfs) 虽然到节点1的最远节点有多个 但是只需要取其中一个来求其最远节点即可以 #include <bits/stdc++.h> using namespace std; #define fin freopen("in.txt", "r", stdin) #define fout freopen("out.txt", "w", stdout) const i...

love_wjk的博客 187

PAT甲级-1021 Deepest Root

找到最大深度根节点,树的直径问题 2次dfs C++

weixin_74092648的博客 793

PAT甲级题目1021 Deepest Root

题目大意: simultaneously(同时地) generate(形成) 程序设计能力竞赛被浙江大学的计算机科学与技术学院举办。每次比赛在不同的地方同时进行,比赛后排名表会被立即合并。现在你的任务是写一个程序正确地合并所有的成绩表得出最后排名。 输入: ①第一行,一个正数N:考场的数量 ②剩下N个块,每个块有一个K,表示这个考场K个考生成绩 输出: 考生编号 最终排名 所在考场编号 所在考场排名 思路: 用一个结构体表示一个考生(编号,成绩,所在考场编号,所在考场排名,成绩最终排名),每读取一个考

weixin_43801993的博客 139

【PAT】【树直径 + 连通分量】1021 Deepest Root (25 分)

// 解题思路: // 其实就是遍历得到树直径 混合 连通分量的个数 // 进行两次dfs // 第一次: // 只需要任选一个节点作为根节点开始遍历,得到深度最大的一个或多个节点 // 第二次: // 再从这其中任选一个,再作为根节点遍历得到深度最大的节点 即是另一端 // !需要注意的是,要进行去重,可能会在这两次中得到了相同的节点,这里用set保存 以去重 // pat的测试数据真是 把我这些思路总是不够全面的家伙 虐的够惨,处处是坑点啊 #include <iostream&gt..

m0_52995942的博客 173

PAT甲级1021 Deepest Root (25 分)题解

\quad这个题暴力也可以过,我试过枚举每一个点开始进行dfs,记录从这个点开始到其他节点的最大深度和对应的节点,记录下来,相互比较得到答案,时间需要1000ms,题目给的限制是2000ms,完全够。 \quad正确解法是从树任一点a开始遍历,记录下距离a最远的顶点集合res1,再从res1中任选一个顶点开始第二次遍历,记录下距离该顶点最远的顶点集合res2,答案就是res1和res2中顶点去重...

qq_40438165的博客 1636

【PAT Advanced Level】1021. Deepest Root (25)

这题分两个步骤: 1. 求出图中有几个连通子图 2. 如果只有一个连通图,找出最长的路径(图的直径) 我直接用了一个DFS求连通子图的个数,其实更通用的方法是并查集。 找出最长路径,我们进行了n次DFS,每次以一个节点作为根节点。后来看了网上的解法,其实只需要两次DFS就可以求得。 昨天我刚刚看了怎么求树的直径,今天该用到的时候又忘了,真是学的不牢啊。具体求法见http://blog.c

Carl.Chen@seu@zju 887

PAT 1021. Deepest Root

【题目链接】 题目大意:给定一个无向图,如果它没有环且是连通的则证明是树,那么就要找出一个结点集,使得集合中的任意一点作为树的根节点,都能使得树的深度达到最大。否则,如果该图不是树,则要求输出图的连通分量的个数。 思路:本题可以用并查集或者dfs求连通分量个数。假设已经是树了,如何求deepest root呢?很显然的一个做法就是对树中的每个结点进行dfs搜索,每一次dfs都记下树能达到的最大

u013172314的博客 603
上一篇: poj2831 树的直径(bfs/dfs)
下一篇: 软件质量测试一般方法
Miqiuha
博客等级 码龄10年 225粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值