当前位置:网站首页>Trees and graphs (traversal)
Trees and graphs (traversal)
2022-07-04 09:06:00 【Zhuo Mu is not a woodpecker】
Depth-first traversal Example :
Given a tree , The tree contains n Nodes ( Number 1~n) and n-1 Undirected edge .
Please find the center of gravity of the tree , And output after deleting the center of gravity , The maximum number of points in the remaining connected blocks .
Center of gravity definition : The center of gravity is a node in the tree , If you delete this point , The maximum number of points in the remaining connected blocks is the minimum , Then this node is called the center of gravity of the tree .
Input format
The first line contains integers n, Represents the number of nodes in a tree .
Next n-1 That's ok , Each line contains two integers a and b, Indication point a Sum point b There is an edge between .
Output format
Output an integer m, Represents the number of nodes of the largest subtree among all subtrees of the center of gravity .
Data range
1≤n≤105
Input :
9
1 2
1 7
1 4
2 8
2 5
4 3
3 9
4 6
Output :
4
This problem requires depth first traversal , Compare the maximum value in the connected block when each number is taken as the root node , Then compare the minimum value as the result ;
The example of this problem is to 123456789 Delete every number once , The maximum number of points in the connected block after each deletion is 467588888, The minimum value is 4, Output 4;
Code :
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=1e6;
int e[N],n,ne[N],h[N],idx,ans=N,res,s;
bool st[N];
void add(int a,int b) {
e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
int dfs(int x) {
st[x]=true;
int size=0,sum=1;
for(int i=h[x]; i!=-1; i=ne[i]) {
int j=e[i];
if(st[j]) continue;
int s=dfs(j);
size=max(size,s);
sum+=s;
}
size=max(size,n-sum);
ans=min(size,ans);
return sum;
}
int main() {
cin>>n;
memset(h,-1,sizeof h);
for(int i=0; i<n-1; i++) {
int a,b;
cin>>a>>b;
add(a,b),add(b,a);
}
dfs(1);
cout<<ans;
return 0;
}
Breadth first traversal Example :
Given a n A little bit m Directed graph of strip edge , There may be double edges and self rings in the graph .
The length of all edges is 1, The number of the point is 1~n.
Please find out 1 It's on the n The shortest distance of point No , If from 1 Point No. can't go to n Number point , Output -1.
Input format
The first line contains two integers n and m.
Next m That's ok , Each line contains two integers a and b, Indicates that there is a path from a Go to the b The length of is 1 The edge of .
Output format
Output an integer , Express 1 It's on the n The shortest distance of point No .
Data range
1≤n,m≤10^5
Input :
4 5
1 2
2 3
3 4
1 3
1 4
Output :
1
This problem requires depth first traversal , Looking for from 1 To n The smallest path of ;
Use the linked list to store , Look for... In order n, use d Array storage steps , When it finds n when , Output d [ n ];
Code :
#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
const int N=1e6;
int n,m,h[N],e[N],ne[N],idx,d[N];
bool st[N];
queue<int> q;
void add(int a,int b){
e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
void bfs(int x){
st[x]=true;
d[x]=0;
q.push(x);
while(q.size()){
int v=q.front();
q.pop();
for(int i=h[v];i!=-1;i=ne[i]){
int w=e[i];
if(!st[w]){
st[w]=true;
q.push(w);
d[w]=d[v]+1;
if(w==n) return;
}
}
}
}
int main(){
cin>>n>>m;
d[n]==-1;// Output when not found -1
memset(h,-1,sizeof h);
for(int i=0;i<m;i++){
int a,b;
cin>>a>>b;
add(a,b);
}
bfs(1);
cout<<d[n]<<endl;
return 0;
}
边栏推荐
- 转:优秀的管理者,关注的不是错误,而是优势
- Launpad | basic knowledge
- awk从入门到入土(8)数组
- Analysis report on the production and marketing demand and investment forecast of tellurium dioxide in the world and China Ⓣ 2022 ~ 2027
- "How to connect the Internet" reading notes - FTTH
- 微服務入門:Gateway網關
- Awk from entry to earth (7) conditional statements
- Awk from entry to earth (18) GAW K line manual
- C language - Introduction - Foundation - syntax - [main function, header file] (II)
- [attack and defense world | WP] cat
猜你喜欢
[untitled] forwarding least square method
Codeforces Round #750 (Div. 2)(A,B,C,D,F1)
C语言-入门-基础-语法-[运算符,类型转换](六)
转:优秀的管理者,关注的不是错误,而是优势
微服务入门:Gateway网关
How should PMP learning ideas be realized?
awk从入门到入土(12)awk也可以写脚本,替代shell
保姆级JDEC增删改查练习
What exactly is DAAS data as a service? Don't be misled by other DAAS concepts
Solve the problem of "Chinese garbled MySQL fields"
随机推荐
Development trend and market demand analysis report of high purity tin chloride in the world and China Ⓔ 2022 ~ 2027
In depth research and investment strategy report on China's hydraulic parts industry (2022 Edition)
Codeforces Round #750 (Div. 2)(A,B,C,D,F1)
Target detection -- intensive reading of yolov3 paper
Clion console output Chinese garbled code
Codeforces Round #750 (Div. 2)(A,B,C,D,F1)
Report on research and investment prospects of polyglycolic acid industry in China (2022 Edition)
Launpad | basic knowledge
Awk from getting started to digging in (4) user defined variables
Awk from digging into the ground to getting started (10) awk built-in functions
awk从入门到入土(6)正则匹配
After unplugging the network cable, does the original TCP connection still exist?
Opencv environment construction (I)
Awk from entry to earth (15) awk executes external commands
You can see the employment prospects of PMP project management
Implementation principle of redis string and sorted set
C语言-入门-基础-语法-数据类型(四)
Getting started with microservices: gateway gateway
Awk from getting started to digging in (11) detailed explanation of awk getline function
Codeforces Round #793 (Div. 2)(A-D)