AtCoder Regular Contest 103 E - Tr/ee

 

 

 

题意 一个树,你每次可以删一条边,然后获得大小为i的连通块

i由字符串决定,第i位为1代表可以

为0代表不可以

题解 构造多个菊花图然后连在一起  利用菊花图的性质就可以了

菊花图: 一个根节点,其他全是叶子

#include<bits/stdc++.h>
#define rep(i,a,n) for(int i=a;i<=n;++i)
#define per(i,a,n) for(int i=n;i>=a;--i)
#define pb push_back
#define fi first
#define se second
#define io std::ios::sync_with_stdio(false)
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int P = 1e9+7, INF = 0x3f3f3f3f;
ll gcd(ll a,ll b) {return b?gcd(b,a%b):a;}
ll qpow(ll a,ll n) {ll r=1%P;for (a%=P;n;a=a*a%P,n>>=1)if(n&1)r=r*a%P;return r;}
const int N = 1e6+10;
char s[N];
int main() {
    io;
    cin>>(s+1);
    int len=strlen(s+1);
    if(s[1]=='0'||s[len]=='1') return puts("-1"),0;
    rep(i,1,len-1) if(s[i]!=s[len-i]) return puts("-1"),0;
    int rt=1;
    rep(i,2,len)
    {
        cout<<rt<<' '<<i<<endl;
        if(s[i-1]=='1')
            rt=i;
    }
}

 

posted @ 2020-07-28 11:12  摸鱼选手LLF  阅读(137)  评论(0)    收藏  举报