2218F 树构造
给定x个节点子树大小为偶数,y个节点子树大小为奇数
明确一点,叶子节点字数大小为1,那么一个偶数大小的节点至少跟着一个奇数节点,所以x必定<=y
再考虑整个树的根,根的子树大小为x+y,如果x+y是偶数,那么此时应该至少有一个偶数节点,即x>0
同理,如若x+y是奇数,那么y>0
满足以上三个条件的树是可以构造的
构造时要扣除根节点,因为根节点已经固定,让每个偶数节点父节点为1(根),子节点再连接一个叶子节点,如若y-x有剩余,让他们直接与根节点相连
include <bits/stdc++.h>
using namespace std;
define int long long
const int N=1010;
vector
vector<vector
char s[N][N];
int dx[]={-1,1,0,0};
int dy[]={0,0,-1,1};
void solve()
{
int x,y,i,j;
cin >> x >> y;
int n=x+y;
if(x>y)
{
cout << "NO\n";
return ;
}
if(n%21&&y0)
{
cout << "NO\n";
return ;
}
if(n%20&&x0)
{
cout << "NO\n";
return ;
}
cout << "YES\n";
if(n%2==0)
x--;
else y--;
for(i=1;i<=x;i++)
{
cout << 1 << " " << i+1 <<endl;
cout << i+1 << " " << x+i+1 << endl;
}
for(i=2*x+2;i<=x+y+1;i++)
{
cout << 1 << " " << i << endl;
}
return ;
}
signed main ()
{
int t;
cin >> t;
while(t--)
solve();
return 0;
}
浙公网安备 33010602011771号