题解:只不过如果有求多个点,输出所有方案。
1 #include2 #include 3 #include 4 #include 5 #include 6 #include 7 #define N 50007 8 #define inf 1000000009 9 using namespace std;10 11 int n,id,mnum;12 int siz[N];13 int cnt,head[N],next[N*2],rea[N*2];14 vector q;15 16 void add(int u,int v)17 {18 next[++cnt]=head[u];19 head[u]=cnt;20 rea[cnt]=v;21 }22 void dfs(int u,int fa)23 {24 int sum=0,msiz=-1;25 siz[u]=1;26 for (int i=head[u];i!=-1;i=next[i])27 {28 int v=rea[i];29 if (v==fa) continue;30 dfs(v,u);31 siz[u]+=siz[v];32 msiz=max(msiz,siz[v]);33 }34 msiz=max(msiz,n-siz[u]);35 if (msiz==mnum) q.push_back(u);36 else37 if (msiz