满江红求调
查看原帖
满江红求调
1523280
a_small_OIer楼主2025/1/31 19:05
#include <bits/stdc++.h>
#define PII pair<int,int>
using namespace std;
typedef long long LL;
int n , p , subtree[310] , ans;
vector<int> tree[310];
queue<int> ill;
int DFS(int n){
	int res = 1;
	for(auto i : tree[n])
		res += DFS(i);
	subtree[n] = res;
	return res;
}
int main(){
	scanf("%d%d" , &n , &p);
	for(int i = 1 ; i <= p ; ++i){
		int u , v;
		scanf("%d%d" , &u , &v);
		tree[u].push_back(v);
	}
	DFS(1);
	/*for(int i = 1 ; i <= n ; ++i)
		printf("%d " , subtree[i]);
	printf("\n");*/
	ill.push(1);
	while(!ill.empty()){
		int l = ill.size();
		for(int i = 1 ; i <= l ; ++i){
			for(auto j : tree[ill.front()])
				ill.push(j);
			ill.pop();
		}
		l = ill.size();
		int num = 0 , cut;
		for(int i = 1 ; i <= l ; ++i){
			int a = ill.front();
			if(subtree[a] > num)
				num = subtree[a] , cut = i;
			ill.pop();
			ill.push(a);
		}
		for(int i = 1 ; i <= l ; ++i){
			int a = ill.front();
			ill.pop();
			if(a != cut)
				ill.push(a);
		}
		ans = ans + l - 1;
	}
	printf("%d" , ans);
	return 0;
}

2025/1/31 19:05
加载中...