当前位置:网站首页>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;
}
边栏推荐
- Codeforces Global Round 21(A-E)
- [untitled] forwarding least square method
- Target detection -- intensive reading of yolov3 paper
- Comparison between sentinel and hystrix
- Relationship and operation of random events
- 地平线 旭日X3 PI (一)首次开机细节
- Dynamic analysis and development prospect prediction report of high purity manganese dioxide in the world and China Ⓡ 2022 ~ 2027
- Trim leading or trailing characters from strings- Trim leading or trailing characters from a string?
- If you can quickly generate a dictionary from two lists
- awk从入门到入土(12)awk也可以写脚本,替代shell
猜你喜欢
How should PMP learning ideas be realized?
Educational Codeforces Round 115 (Rated for Div. 2)
Codeforces Round #793 (Div. 2)(A-D)
C语言-入门-基础-语法-[运算符,类型转换](六)
ArcGIS应用(二十二)Arcmap加载激光雷达las格式数据
How can we make a monthly income of more than 10000? We media people with low income come and have a look
保姆级JDEC增删改查练习
Bishi blog (13) -- oral arithmetic test app
Live in a dream, only do things you don't say
微服务入门:Gateway网关
随机推荐
Awk from digging into the ground to getting started (10) awk built-in functions
Flutter tips: various fancy nesting of listview and pageview
"How to connect the Internet" reading notes - FTTH
Awk from entry to soil (5) simple condition matching
Launchpad x | mode
China battery grade manganese sulfate Market Forecast and strategic consulting report (2022 Edition)
Reading notes of how the network is connected - understanding the basic concepts of the network (I)
Industry depression has the advantages of industry depression
Démarrage des microservices: passerelle
After unplugging the network cable, does the original TCP connection still exist?
Clion console output Chinese garbled code
Codeforces Round #803 (Div. 2)(A-D)
The basic syntax of mermaid in typera
How to ensure the uniqueness of ID in distributed environment
At the age of 30, I changed to Hongmeng with a high salary because I did these three things
How do microservices aggregate API documents? This wave of show~
Mac platform forgets the root password of MySQL
Awk from getting started to digging in (4) user defined variables
From scratch, use Jenkins to build and publish pipeline pipeline project
【LeetCode 42】501. Mode in binary search tree