Luogu P3174 [HAOI2009]毛毛虫 题解
Describe
题目链接
对于一棵树,我们可以将某条链和与该链相连的边抽出来,看上去就象成一个毛毛虫,点数越多,毛毛虫就越大。例如下图左边的树(图 1)抽出一部分就变成了右边的一个毛毛虫了(图 2)。
Solution
毛毛虫?
很明显,我们可以先预处理出每个点的入度。
显然最后的答案就是sum{a_i}-(s-1) 1=sum{a_i-1} 2(好好想想)
Code
代码语言:javascript复制#include<bits/stdc .h>
using namespace std;
int n,m,in[300010],Max,now;
vector<int> v[300010];
inline void DFS(int x,int fa,int sum){
if(sum>Max){
Max=sum;
now=x;
}
for(auto i:v[x])
if(fa!=i) DFS(i,x,sum in[i]);
}
int main(){
scanf("%d%d",&n,&m);
for(int x,y,i=1;i<=m;i ){
scanf("%d%d",&x,&y);
v[x].push_back(y);
v[y].push_back(x);
in[x] ;in[y] ;
}
for(int i=1;i<=n;i ) in[i]--;
DFS(1,0,in[1]);
Max=0;
DFS(now,0,in[now]);
printf("%dn",Max 2);
}