还没写好的博客

#include<iostream>
#include<cstring>
#include<queue>
#include<vector>
using namespace std;
const int maxn = 3e5+11;
vector<int>G[maxn];
void add(int x,int y){
	G[x].push_back(y);
}
int n,m;
int dp[maxn];
int son[maxn];
int dfs(int x,int fa){
	int ans = 0;
	for(int i=0;i<G[x].size();i++){
		int p = G[x][i];
		if(p == fa) continue;
		dfs(p,x);
		son[x] ++;
		ans = max(ans,dp[p]);
	}
	if(son[x] == 0){
		dp[x] = 1;
		return 0;
	}
	dp[x] = ans + son[x];
	return 0;
}

int main(){
	scanf("%d%d",&n,&m);
	for(int i=0;i<m;i++){
		int x,y;
		scanf("%d%d",&x,&y);
		add(x,y);
		add(y,x);
	}
	cout<<endl; 
	dfs(1,-1);
	for(int i=1;i<=n;i++){
		cout<<dp[i]<<" "<<i<<endl;
	}
	return 0;
}

  

原文地址:https://www.cnblogs.com/lesning/p/13902477.html