题目描述
输入
输出
样例输入
3 2 1
样例输出
2
1 2
题解
乱搞+特判
显然只需要求出最小覆盖代价的最小值和最大值即可,这个区间内的所有值都可能出现。
对于一般情况,最小值显然是菊花森林(边数多的话再添加无用边),答案是max(n-m,1);由于可以有重边,因此最大值是使所有边连接相同的两个节点,答案是n-1.
特殊情况:
n=1,m>0:此时是无法连出任何一条边的,因此不存在这样的图,输出0;
k=0:此时边没有用,最小值最大值都是n;
m=0:此时算最大值时不能连两个相同节点,答案是n。
#include <cstdio>
int main()
{
int n , m , k , i , l = 1 , r;
scanf("%d%d%d" , &n , &m , &k) , r = n - 1;
if(n == 1 && m) printf("0");
else
{
if(!k) printf("1\n%d" , n);
else
{
if(m < n) l = n - m;
if(!m) r = n;
printf("%d\n" , r - l + 1);
for(i = l ; i < r ; i ++ ) printf("%d " , i);
printf("%d" , r);
}
}
return 0;
}
原文:http://www.cnblogs.com/GXZlegend/p/7707925.html