AcWing 681. 疏散人群
原题链接
简单
作者:
fairydetail
,
2019-04-28 17:11:35
,
所有人可见
,
阅读 1279
C++ 代码
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=1e5+10,M=N*2;
int n;
int h[N],e[M],ne[M],idx;
int q[N];
bool st[N];
void add(int a,int b)
{
e[idx]=b;
ne[idx]=h[a];
h[a]=idx;
idx++;
}
int dfs(int u,int father)
{
int res=1;
for(int i=h[u];i!=-1;i=ne[i])
{
int son=e[i];
if(son!=father) res+=dfs(son,u);
}
return res;
}
int bfs(int u)
{
int hh=0,tt=0;
q[0]=u;
st[u]=true;
while(hh<=tt)
{
int t=q[hh++];
for(int i=h[t];i!=-1;i=ne[i])
{
int son=e[i];
if(!st[son])
{
q[++tt]=son;
st[son]=true;
}
}
}
return tt+1;
}
int main()
{
cin>>n;
memset(h,-1,sizeof(h));
for(int i=0;i<n-1;i++)
{
int a,b;
cin>>a>>b;
add(a,b),add(b,a);
}
int res=0;
for(int i=h[1];i!=-1;i=ne[i])
{
res=max(res,dfs(e[i],1));
}
cout<<res<<endl;
return 0;
}