判断图是否都连接构成树,求使树高最大的根
实际上求图上两点间最大距离
先用并查集判断共有几个部分
bfs求距离
先任取一点开始bfs,得到最远的叶节点
以此叶节点再bfs可得
#include<iostream>
using namespace std;
#include<string>
#include<vector>
#include<queue>
#include<set>
#include<memory.h>
#include<algorithm>
#define MAXV 10001
int dist[MAXV]; // store distance
int points[MAXV]; // store root
vector<int> adj_list[MAXV]; //store neighbor
//return the max distance
int bfs(int start , int V)
{
memset(dist,-1,sizeof(dist));
dist[start] = 0;
queue<int> q;
q.push(start);
int dmax = 0;
while(!q.empty())
{
int now = q.front();
q.pop();
int d = dist[now];
for(int i = 0; i < adj_list[now].size(); i++)
{
//not visit before
if(dist[ adj_list[now][i] ] == -1)
{
dist[ adj_list[now][i] ] = d +1;
q.push(adj_list[now][i]);
}
}
if(d > dmax)
{
dmax = d;
}
}
return dmax;
}
int find(int pos)
{
if(points[pos] == -1)
return pos;
return points[pos] = find(points[pos]);
}
int merge(int a,int b)
{
int roota = find(a);
int rootb = find(b);
if(roota == rootb)
return 0;
points[roota] = rootb;
return 1;
}
int main()
{
int N;
int a;
int b;
cin>>N;
memset(points,-1,sizeof(points));
for(int i=0;i<N-1;i++)
{
cin>>a;
cin>>b;
merge(a,b);
adj_list[a].push_back(b);
adj_list[b].push_back(a);
}
//count components
int cnt = 0;
for(int i=1;i<=N;i++)
{
if(points[i]==-1)
cnt++;
}
set<int> first;
set<int> total;
if(cnt != 1)
{
cout<<"Error: "<<cnt<<" components"<<endl;
return 0;
}
else
{
int dmax = bfs(1,N);
for(int i = 1 ;i <= N;i++ )
{
if(dist[i] == dmax)
{
first.insert(i);
total.insert(i);
}
}
dmax = bfs(*first.begin(),N);
for(int i = 1 ;i <= N;i++ )
{
if(dist[i] == dmax)
{
first.insert(i);
total.insert(i);
}
}
for( set<int>::iterator it = total.begin() ; it != total.end() ; ++it )
{
cout << *it << endl;
}
}
}
分享到:
相关推荐
- **环检测** (1021 Deepest Root, 1131 Subway Map): 理解图的环检测,如Floyd-Warshall或拓扑排序。 - **可达性分析** (1139 First Contact): 使用图来表示关系,判断节点间的可达性。 4. **树结构**: - **...
- **deep**(深的)— **deeper** — **deepest** - **fast**(迅速的)— **faster** — **fastest** - **few**(少的)— **fewer** — **fewest** - **great**(伟大的)— **greater** — **greatest** - **hard...
- **like**: 用来列举,如"like your deepest feelings and thoughts",相当于"such as"。 - **a series of**: 一系列,如"a series of lectures"。 - **crazy**: 表示疯狂或痴迷,如"be crazy about music"。 -...
—The Caspian Sea is the deepest of all the salt lakes.**(- 世界上最深的咸水湖是哪一个?- 里海是最深的咸水湖。) - **You should hurry up. The book report is due in two weeks.**(你应该快点。读书...
60. **From-Deepest-Fathoms** (代码: 1335A) - Riften的一位神秘生物。 61. **Maramal** (代码: 1335B) - Riften的一位男性祭司。 62. **Grelod the Kind** (代码: 1335E) - Riften的一位非常不受欢迎的女性贵族。 ...
电影中的经典台词可能包括Rapunzel的“Dreams are messages from our deepest selves”(梦想是我们内心深处的信息),以及Flynn的“I have both feet firmly planted on the ground, and I'm not letting go until...
[865]具有所有最深结点的最小子树|smallest-subtree-with-all-the-deepest-nodes给定一个根为 root 的二叉树,每
50. **唤起某人最深的伤痛** - "recall one’s deepest wounds":触及内心深处的回忆,可能与情感创伤有关。 在复习这个单元时,学生不仅需要记忆这些词汇和短语,还要通过实际的对话、写作和听力练习来熟练掌握...
your web server's document root or your public HTML directory: mv drupal-x.x/* drupal-x.x/.htaccess /var/www/html If you would like to have the default English interface translated to a ...
1123.Lowest_Common_Ancestor_of_Deepest_Leaves最深叶节点的最近公共祖先【LeetCo
- 自学单词和预习课文,填写首字母填空,如 `square kilometers`,`deepest`,`population` 和 `protect China`。 - 合作校对答案,分组学习新单词和短语,进行听力练习和对话练习。 - 对话表演,例如1c中的对话...
- 学习重点与考点集中在形容词和副词的比较级变化规则上,例如:high -> higher -> highest,deep -> deeper -> deepest,big -> bigger -> biggest,long -> longer -> longest,old -> older/elder -> oldest/...
在本题LeetCode 1123中,我们需要找到给定二叉树中最深叶节点的最近公共祖先(Lowest Common Ancestor of Deepest Leaves)。首先,了解二叉树的基本概念,二叉树是由节点组成的,每个节点可以有最多两个子节点,...
- 学习目标中提到的“重点短语和句子”包括了本单元出现的与地理、自然和比较级相关的词汇和表达,如“highest”(最高的)、“deepest”(最深的)、“largest”(最大的)、“oldest”(最古老的)等形容词的比较...
例如,对于"The deepest part of the water is near Japan.",我们可能提问为"Where is the deepest part of the water?"。 2. **时态转换**:"My father will take me to Beijing." 提问时可以转化为"Who will ...
3. **最深嵌套级别**(Deepest level of nesting, STMIF):限制嵌套循环和条件语句的深度,通常建议不超过4级,以防止代码过于复杂。 4. **GOTO语句数量**(Number of GOTO's, STGTO):GOTO语句的使用应被严格...
例如,“I am writing to express my deepest apologies for...” - 接着简要地描述导致道歉的具体事件或情况。 2. **主体段落**: - 解释造成错误的原因,但要保持诚实和谦逊,不要找借口。 - 提出补救措施或...
例如,给定的输入是二叉树的根节点root,我们需要找到最深叶子节点的LCA。输出可以是一个TreeNode对象,表示包含这些最深叶子节点的路径。 在提供的代码中,作者定义了一个名为Solution的类,并使用了递归的方法来...
2. **形容词比较级与最高级**:"Deep", "Deeper", "Deepest"是形容词"深"的三个级别,分别表示原级、比较级和最高级,用来表达不同程度的深度。 3. **害怕的表达**:"be afraid of (doing) sth."表示对某事感到害怕...