题意 一个树,你每次可以删一条边,然后获得大小为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; } }