附玄学做法:
#include<bits/stdc++.h>
#define F(i,a,b) for(register int i=(a);i<=(b);i++)
using namespace std;
const int N=301;
int n,m,dep[N],depst,sz[N];
vector<int> f[N];
bool vis[N],mk[N];
void dfs(int x,int deep) {
dep[x]=deep;
depst=max(depst,deep);
for(register int j=0; j<f[x].size(); j++) {
int &pos=f[x][j];
if(vis[pos])continue;
vis[pos]=1;
dfs(pos,deep+1);
sz[x]+=sz[pos];
}
}
void rec(int x) {
for(register int j=0; j<f[x].size(); j++) {
int &pos=f[x][j];
if(dep[pos]<dep[x])continue;
vis[pos]=mk[pos]=1;
rec(pos);
}
}
int main() {
// freopen("data.in","r",stdin);
scanf("%d%d",&n,&m);
F(i,1,m) {
static int u,v;
scanf("%d%d",&u,&v);
f[u].push_back(v);
f[v].push_back(u);
}
F(i,1,n)sz[i]=1;
vis[1]=1;
dfs(1,1);
memset(vis,0,sizeof(vis));
vis[1]=1;
F(i,2,depst) {
register int mx=-1,id=0;
F(j,1,n) {
if(!vis[j] and dep[j]==i) {
vis[j]=1;
int t=f[j].size();
if(sz[j]+t>mx)mx=sz[j]+t,id=j;
}
}
mk[id]=1,rec(id);
}
register int ans=0;
F(i,2,n)ans+=mk[i];
printf("%d",n-ans);
return 0;
}