题意:建立一个连通图,它的所有点的度为k,且至少含有一个桥。
做法:先建立一个桥,再在桥两边建立两个度为k的连通图,通过这个桥连接在一起。
很显然k为偶数的时候无解。
#include<map>
#include<string>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<queue>
#include<vector>
#include<iostream>
#include<algorithm>
#include<bitset>
#include<climits>
#include<list>
#include<iomanip>
#include<stack>
#include<set>
using namespace std;
int main()
{
int n;
cin>>n;
if(n%2==0)
{
puts("NO");
return 0;
}
puts("YES");
if(n==1)
{
printf("2 1\n1 2");
return 0;
}
n++;
cout<<2*n+2<<" ";
if(n&1)
cout<<n*n<<endl;
else
cout<<n*n-1<<endl;
for(int i=1;i<=n;i++)
{
if(i<n-1)
{
cout<<i<<" "<<2*n+1<<endl;
cout<<i+n<<" "<<2*n+2<<endl;
}
if(i==n-1)
{
cout<<i<<" "<<i+1<<endl;
cout<<i+n<<" "<<i+1+n<<endl;
}
for(int j=i+1;j<=n;j++)
{
if(!((i&1)&&j==i+1))
{
cout<<i<<" "<<j<<endl;
cout<<i+n<<" "<<j+n<<endl;
}
}
}
cout<<2*n+1<<" "<<2*n+2<<endl;
}版权声明:本文为博主原创文章,未经博主允许不得转载。
codeforce 550 D Regular Bridge
原文:http://blog.csdn.net/stl112514/article/details/47112191