CF1833G Ksyusha and Chinchilla

// LUOGU_RID: 122113992
//#include<bits/stdc++.h>
#include<cstdio>
#include<iostream>
#include<algorithm>
#define N 200005
using namespace std;

struct star{
    int nxt,to,id;
}e[N<<1];
int head[N],tot;
int T,n,size[N];
bool flag,cut[N];

void add(int u,int v,int w){
    e[++tot].nxt=head[u];
    e[tot].to=v;
    e[tot].id=w;
    head[u]=tot;
}
void dfs(int step,int father){
    if(flag) return;
    int f=0;
    for(int i=head[step];i;i=e[i].nxt)
        if(e[i].to==father) f=e[i].id;
        else dfs(e[i].to,step),size[step]+=size[e[i].to];
//    size[step]++;
    if(size[step]==3) size[step]=0,cut[f]=1;//!! 
    else if(size[step]>3) flag=1;
}
void clear(){
    tot=0;flag=1;
    for(int i=1;i<=n;i++){
            head[i]=cut[i]=0;
            size[i]=1;
            e[(i<<1)-1]=e[i<<1]={0,0,0};
        }
}
int main(){
    cin.tie(0),cout.tie(0);
    ios::sync_with_stdio(0);
    cin>>T;
    while(T--){
        cin>>n;clear(); 
        //if(n%3){ cout<<"-1\n";continue;}
        //数据还未输入完 ,会导致错误,全部输入后 再 输出
        //flag 就单一作用 指示是否 正确
          
        for(int i=1,u,v;i<n;i++)
            cin>>u>>v,add(u,v,i),add(v,u,i);
        flag=n%3; 
        dfs(1,0);
        if(flag) cout<<"-1\n";
        else{
            cout<<n/3-1<<"\n";
            for(int i=1;i<n;i++)
                if(cut[i]) cout<<i<<" ";
            cout<<"\n";
        }
    }
    return 0;
}

 

posted @ 2023-08-22 09:15  JMXZ  阅读(10)  评论(0)    收藏  举报