tkj
文章143
标签102
分类0
bzoj 5060: 魔方国

bzoj 5060: 魔方国

.

题意:给出一个图的点数和边数。一个守卫可以守护它所在的点以及与从它所在的点出发,经过不超过k条边所能到达的点。每种构图都有一个最少守卫数,问所有的最少守卫数。
题解:假如图是可以连通的,那么一定可以只用一个守卫(从一个点连n-1条边到其他点)就可以了,最多n-1个守卫(变成n-1个连通块,每个连通块一个)。不连通最少要n-m个,最多还是n-1个。注意许多特判,具体看代码。
代码:

#include<bits/stdc++.h>
using namespace std;

int n,m,k;

int main()
{
    scanf("%d%d%d",&n,&m,&k);
    if(n<1||(n==1&&m))
    {
        puts("0");
    }
    else if(k==0||m==0)
    {
        printf("1\n%d",n);
    }
    else if(m>=n-1)
    {
        printf("%d\n",n-1);
        for(int i=1;i<n;i++)
        printf("%d ",i);
    }
    else
    {
        printf("%d\n",m);
        for(int i=n-m;i<n;i++)
        printf("%d ",i);
    }
}
本文作者:tkj
本文链接:https://tkj666.github.io/85/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可