AtCoderACGC001C Shorten Diameter

Posted artlover

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AtCoderACGC001C Shorten Diameter相关的知识,希望对你有一定的参考价值。

Description:

给定一个(n)个点的树,要求删去最少的点使树的致直径不超过k

Solution:

如果(k)为偶数,对于最终状态一定是以每一个点为根任何点的深度不能超过(k/2),那我们就以每个点为根求一下深度,然后再求一遍最小值,我们来看(k)为奇数时,我们先钦定一条边固定,分别以两端为根求深度,将问题转化为(k)为偶数即可

Code:

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int MAXX=2010;
struct node
{
    int x,y;
}e[MAXX];
int head[MAXX],ver[MAXX<<1],nxt[MAXX<<1],deep[MAXX];
int n,k,tot;
inline void add(int x,int y){
    ver[++tot]=y;
    nxt[tot]=head[x];
    head[x]=tot;
}
inline void dfs(int x,int f,int dp){
    deep[x]=dp;
    for(int i=head[x];i;i=nxt[i]){
        int y=ver[i];
        if(y==f)continue;
        dfs(y,x,dp+1);
    }
} 
int main(){
   scanf("%d%d",&n,&k);
   for(int i=1;i<n;++i){
    scanf("%d%d",&e[i].x,&e[i].y);
    add(e[i].x,e[i].y);
    add(e[i].y,e[i].x);
   }
   int ans=0x3f3f3f3f;
   if(k&1){
      for(int i=1;i<n;++i){
        int cnt=0;
        dfs(e[i].x,e[i].y,0);
        dfs(e[i].y,e[i].x,0);
        for(int j=1;j<=n;++j)if(deep[j]>(k-1)/2)cnt++;
        ans=min(ans,cnt);
      } 
   }
   else {
      for(int i=1;i<=n;++i){
      int cnt=0;
      dfs(i,0,0);
      for(int j=1;j<=n;++j)if(deep[j]>k/2)cnt++;
      ans=min(ans,cnt);
      }
    }
    cout<<ans;
    return 0;
}

以上是关于AtCoderACGC001C Shorten Diameter的主要内容,如果未能解决你的问题,请参考以下文章

为啥我必须为每种测试方法设置 Shorten 命令行?

idea 启动shorten command line too long 错误解析

idea : shorten command line

Shorten IPv6 Address

idea运行main方法报错,提示Shorten command line for xxx

如何在 IE11 上使用 Bitly V4 URL Shorten API