题目:点击打开链接
题意:给定a,b.要求构造一个邻接矩阵,对应的图中,有a个联通块;对应的补图有b个联通块。
分析:a>1,那么b一定为1.说明a,b中至少有一个是1.特判构造
a>1,前a-1个独立,为a-1个联通块;[a+1,n]顶点为一个联通块
a==1,b>1.构造补图的,再返回来
a==1,b==1.n=1成立,n=2,n=3不成立.n>=4,就是一个链
构造题做的太少了,看到这题毫无思路。
我的代码:
#pragma comment(linker, "/STACK:102400000,102400000")///手动扩栈
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
参考代码:
#include
using namespace std;
int a,b,n,res[1005][1005];
int main(){
cin>>n>>a>>b;
if(n==1) return cout<<"YES\n0",0;
if(min(a,b)>1 || (n<=3 && max(a,b)==1))
return cout<<"NO",0;
cout<<"YES\n";
for(int i=1+max(a,b);i<=n;++i)
res[i-1][i] = res[i][i-1] = 1;
for(int i=1;i<=n;++i,cout<<'\n')
for(int j=1;j<=n;++j)
cout<<(i==j?0:res[i][j]^(a
参考博客:https://blog.csdn.net/haipai1998/article/details/80670059