题解
2023-05-27 17:11:50
发布于:上海
37阅读
0回复
0点赞
#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
const int maxn=377;
int n,p,f[maxn],s=0,ans=0;
vector<int> d[maxn],a[maxn];
void init(int u,int dep)
{
d[dep].push_back(u);
for(int i=0; i<a[u].size(); i++)
{
init(a[u][i],dep+1);
}
}
int work(int u,int t)
{
int ss=1; f[u]=t;
for(int i=0; i<a[u].size(); i++)
{
ss+=work(a[u][i],t);
}
return ss;
}
void dfs(int dep)
{
for(int i=0; i<d[dep].size(); i++)
{
if(f[d[dep][i]]) continue;
s+=work(d[dep][i],1); ans=max(ans,s);
dfs(dep+1);
s-=work(d[dep][i],0);
}
}
int main()
{
scanf("%d%d",&n,&p);
for(int i=1; i<=p; i++)
{
int x,y;
scanf("%d%d",&x,&y);
if(x>y) swap(x,y);
a[x].push_back(y);
}
init(1,1);
dfs(2);
printf("%d",n-ans);
}
这里空空如也
有帮助,赞一个