zoukankan      html  css  js  c++  java
  • luogu5536 核心城市

    题目描述

    X 国有 nn 座城市,n − 1n1 条长度为 11 的道路,每条道路连接两座城市,且任意两座城市都能通过若干条道路相互到达,显然,城市和道路形成了一棵树。

    X 国国王决定将 kk 座城市钦定为 X 国的核心城市,这 kk 座城市需满足以下两个条件:

    1. 这 kk 座城市可以通过道路,在不经过其他城市的情况下两两相互到达。
    2. 定义某个非核心城市与这 kk 座核心城市的距离为,这座城市与 kk 座核心城市的距离的最小值。那么所有非核心城市中,与核心城市的距离最大的城市,其与核心城市的距离最小。你需要求出这个最小值。

    输入格式

    第一行 22 个正整数 n,kn,k。

    接下来 n - 1n1 行,每行 22 个正整数 u,vu,v,表示第 uu 座城市与第 vv 座城市之间有一条长度为 11 的道路。

    数据范围:

    • 1 le k < n le 10 ^ 51k<n105。
    • 1 le u,v le n, u e v1u,vn,u=v,保证城市与道路形成一棵树。

    输出格式

    一行一个整数,表示答案。

    输入输出样例

    输入 #1
    6 3
    1 2
    2 3
    2 4
    1 5
    5 6
    
    输出 #1
    1
    

    说明/提示

    【样例说明】

    钦定 1,2,51,2,5 这 33 座城市为核心城市,这样 3,4,63,4,6 另外 33 座非核心城市与核心城市的距离均为 11,因此答案为 11。

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int maxn=1e5+10;
     4 struct edge
     5 {
     6     int u,v,nxt;
     7 }e[maxn<<1];
     8 int head[maxn],js;
     9 void addage(int u,int v)
    10 {
    11     e[++js].u=u;e[js].v=v;
    12     e[js].nxt=head[u];head[u]=js;
    13 }
    14 int n,m;
    15 int rd[maxn],dis[maxn];
    16 queue<int>q;
    17 int main()
    18 {
    19     scanf("%d%d",&n,&m);
    20     for(int u,v,i=1;i<n;++i)
    21     {
    22         scanf("%d%d",&u,&v);
    23         addage(u,v);
    24         addage(v,u);
    25         rd[u]++;rd[v]++;
    26     }
    27     for(int i=1;i<=n;++i)dis[i]=1e5+10;
    28     for(int i=1;i<=n;++i)
    29         if(rd[i]==1)
    30         {
    31             dis[i]=1;
    32             q.push(i);
    33         }
    34     int cnt=n;
    35     while(!q.empty())
    36     {
    37         int u=q.front();q.pop();
    38         cnt--;
    39         if(cnt==m)
    40         {
    41             printf("%d
    ",dis[u]);
    42             return 0;
    43         }
    44         for(int i=head[u];i;i=e[i].nxt)
    45         {
    46             int v=e[i].v;
    47             if(rd[v]>1)--rd[v];
    48             if(rd[v]==1&&dis[v]>dis[u]+1)
    49             {
    50                 dis[v]=dis[u]+1;
    51                 q.push(v);
    52             }
    53         }
    54     }
    55     return 0;
    56 }
    View Code
  • 相关阅读:
    排序算法(2)-冒泡排序及优化
    [转]Java泛型详解
    [转]Java泛型详解
    02-机器学习_(knn分类算法与应用)
    01-机器学习_(python数据类型详解)
    流量运营项目说明
    数据仓库星型模型vs雪花模型
    数据仓库命名规范
    数据仓库建模
    数据仓库
  • 原文地址:https://www.cnblogs.com/gryzy/p/14584868.html
Copyright © 2011-2022 走看看