欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spanning Tree Removal

程序员文章站 2022-06-07 21:47:20
...

题意:
给你一个任意两点相连的图,你每次移除生成树,如何能移除生成树的次数最大,并打印移除生成树的方法。
思路:
构造
草稿纸画图突然发现:
Spanning Tree Removal
以此类推

#include<bits/stdc++.h>
#pragma GCC optimize(2)
using namespace std;
typedef long long ll;
const ll mod = 1e9 +7;
const ll MAXN = 1e6 + 5;
  
int cnt,n,ans;
int f[505][1005];
int a[3005];
void init(){
    for(int i=1;i<=n;i++){
        a[i]=i;
    }
    for(int i=n+1;i<=2*n;i++){
        a[i]=i-n;
    }
    return;
}
  
void find(){
    for(int i=1;i<=ans;i++){
        for(int j=1;j<=n;j++){
            int base;
            if(j%2) base=-1;
            else base=1;
            f[i][j]=a[n+2-i+(j/2)*base];
        }
    }
}
  
void solve(){
    cnt++;
    cin>>n;
    init();
    ans=n/2;
    cout<<"Case #"<<cnt<<": "<<ans<<endl;
    find();
    for(int i=1;i<=ans;i++){
        for(int j=1;j<=n-1;j++){
            cout<<f[i][j]<<" "<<f[i][j+1]<<endl;
        }
    }
}
  
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    int T;cin>>T;
    while(T--){
        solve();
    }
    return 0;
}
相关标签: ICPC