AtCoder Grand Contest 032 B - Balanced Neighbors(构造)

题目链接
题意:

给定一个整数 n n n ,试构造一个节点数为 n n n无向图。令节点编号为 1... n 1...n 1...n ,要求其满足以下条件:

  • 这是一个简单连通图。
  • 存在一个整数 s s s 使得对于任意节点,与其相邻节点的下标和为 s s s

保证输入数据有解。

题解:

n n n 进行奇偶讨论。

1. 1. 1. n n n 为偶数,我们把 n n n 量两两配对,分成 n / 2 n/2 n/2 对,分别为 ( 1 , n ) ( 2 , n − 1 ) ( 3 , n − 2 ) . . . . (1,n) (2,n-1) (3,n-2).... (1,n)(2,n1)(3,n2).... ,每一对的两个点不建边,只与其他对的点建边,那么会发现,每个点的相邻点下标之和就为 ( n / 2 − 1 ) ⋅ ( n + 1 ) (n/2-1) \cdot (n+1) (n/21)(n+1)

2. 2. 2. n n n为奇数 ,我们把 n n n单独拿出来, ( n ) ( 1 , n − 1 ) ( 2 , n − 2 ) ( 3 , n − 3 ) . . . (n) (1,n-1) (2,n-2) (3,n-3)... (n)(1,n1)(2,n2)(3,n3)... 剩下的操作就和偶数是一样的。

代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include<map>
#include<stack>
#include<set>
#include<ctime>
#define iss ios::sync_with_stdio(false)
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
typedef pair<int,int>pii;
const int MAXN=2e5+5;
const int mod=1e9+7;
const int inf=0x3f3f3f3f;
struct node
{
    int a,b;
}f[MAXN];
int cnt=0;
std::vector<pii> v;
void add(int i,int j){
    v.push_back({f[i].a,f[j].a});
    v.push_back({f[i].a,f[j].b});
    v.push_back({f[i].b,f[j].a});
    v.push_back({f[i].b,f[j].b});
}
int main()
{
    int n;
    cin>>n;
    if(n&1){
        for(int i=1;i<=n/2;i++){
            f[++cnt].a=i;
            f[cnt].b=n-i;
        }
        for(int i=1;i<=cnt;i++){
            v.push_back({n,f[i].a});
            v.push_back({n,f[i].b});
        }
        for(int i=1;i<=cnt;i++){
            for(int j=i+1;j<=cnt;j++){
                add(i,j);
            }
        }
    }
    else{
        for(int i=1;i<=n/2;i++){
            f[++cnt].a=i;
            f[cnt].b=n-i+1;
        }
        for(int i=1;i<=cnt;i++){
            for(int j=i+1;j<=cnt;j++){
                add(i,j);
            }
        }
    }
    cout<<v.size()<<endl;
    for(int i=0;i<v.size();i++){
        cout<<v[i].first<<" "<<v[i].second<<endl;
    }
}
posted @ 2021-03-15 20:26  TheBestQAQ  阅读(19)  评论(0)    收藏  举报