zoukankan      html  css  js  c++  java
  • luogu3698 [CQOI2017]小Q的棋盘

    最长链是根节点到深度最深的结点的路径。

    显然,要么直接走最长链,要么兜兜转转几个圈圈再走最长链,而最长链以外的结点因为要“兜圈”,所以要经过两次。

    #include <iostream>
    #include <cstdio>
    using namespace std;
    int n, v, hea[105], cnt, uu, vv, zcl, dep[105], ans;
    struct Edge{
    	int too, nxt;
    }edge[205];
    void add_edge(int fro, int too){
    	edge[++cnt].nxt = hea[fro];
    	edge[cnt].too = too;
    	hea[fro] = cnt;
    }
    void dfs(int x, int f){
    	dep[x] = dep[f] + 1;
    	zcl = max(zcl, dep[x]);
    	for(int i=hea[x]; i; i=edge[i].nxt){
    		int t=edge[i].too;
    		if(t!=f)	dfs(t, x);
    	}
    }
    int main(){
    	cin>>v>>n;
    	for(int i=1; i<v; i++){
    		scanf("%d %d", &uu, &vv);
    		uu++;
    		vv++;
    		add_edge(uu, vv);
    		add_edge(vv, uu);
    	}
    	dfs(1, 0);
    	if(n+1<=zcl)	ans = n + 1;
    	else	ans = min(v, (n+1-zcl)/2+zcl);
    	cout<<ans<<endl;
    	return 0;
    }
    
  • 相关阅读:
    PHP乘法表
    通过闭包可以返回局部变量
    FZU2125_简单的等式
    FZU2122_又见LKity
    FZU2121_神庙逃亡
    UVA12585_Poker End Games
    UVA12583_Memory Overow
    HDU4647_Another Graph Game
    HDU4646_Laser Beam
    HDU4787_GRE Words Revenge
  • 原文地址:https://www.cnblogs.com/poorpool/p/8572279.html
Copyright © 2011-2022 走看看