zoukankan      html  css  js  c++  java
  • #树的直径#洛谷 3174 [HAOI2009]毛毛虫

    题目


    分析

    类似于树的直径,只是点权变成了出度-1,
    注意减1之后会漏掉两个端点要加回去,当(n=1)时特判


    代码

    #include <cstdio>
    #include <cctype>
    #define rr register
    using namespace std;
    const int N=300011;
    struct node{int y,next;}e[N<<1];
    int deg[N],ls[N],n,k,mx,rt;
    inline signed iut(){
    	rr int ans=0; rr char c=getchar();
    	while (!isdigit(c)) c=getchar();
    	while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
    	return ans;
    }
    inline void dfs(int x,int fa,int sum){
    	if (mx<sum) mx=sum,rt=x;
    	for (rr int i=ls[x];i;i=e[i].next)
    	if (e[i].y!=fa) dfs(e[i].y,x,sum+deg[e[i].y]);
    }
    signed main(){
    	n=iut(),iut(),k=1;
    	if (n==1) return !putchar(49);
    	for (rr int i=1;i<=n;++i) deg[i]=-1;
    	for (rr int i=1;i<n;++i){
    		rr int x=iut(),y=iut();
    		e[++k]=(node){y,ls[x]},ls[x]=k,++deg[x],
    		e[++k]=(node){x,ls[y]},ls[y]=k,++deg[y];
    	}
    	dfs(1,0,deg[1]),mx=0,dfs(rt,0,deg[rt]);
    	return !printf("%d",mx+2);
    } 
    
  • 相关阅读:
    清北学堂(2019 5 3) part 6
    清北学堂(2019 5 2) part 5
    清北学堂(2019 5 1) part 4
    dijkstra
    清北学堂(2019 4 30 ) part 3
    2020/5/1
    2020/4/30
    2020/4/29
    HSV模型
    2020/4/28
  • 原文地址:https://www.cnblogs.com/Spare-No-Effort/p/14485394.html
Copyright © 2011-2022 走看看