90pts求条
查看原帖
90pts求条
1090689
TechLyx楼主2025/7/21 10:00
#include<iostream>
#include<queue>
#include<string.h>
#define N 301
using namespace std;
int n,p,f[N]={},m[N]={};bool a[N][N]={},v[N]={};
struct tree{int t,x,r;}tmp;queue<tree>q;
int dfs(int x){
	v[x]=f[x]=1;
	for(int i=1;i<=n;i++)
		if(a[x][i]&&!v[i])f[x]+=dfs(i);
	return f[x];
}
int main(){
	int i,j,t=0;
	cin>>n>>p;
	while(p--){
		cin>>i>>j;
		a[i][j]=a[j][i]=1;
	}
	dfs(1);
	memset(v,0,sizeof(v));
	tmp={0,1,1},v[1]=1;q.push(tmp);
	while(!q.empty()){
		m[0]=0;
		while(!q.empty()&&q.front().t==t){
			tmp=q.front();q.pop();
			if(tmp.r==m[t-1])continue;
			if(f[tmp.x]>f[m[t]])m[t]=tmp.x;
			for(i=1;i<=n;i++)
				if(a[tmp.x][i]&&!v[i]){
					q.push({tmp.t+1,i,tmp.x});
					v[i]=1;
				}
		}
		t++;
	}
	for(i=1;m[i];i++)n-=f[m[i]];
	cout<<n;
}
2025/7/21 10:00
加载中...