可以证明只要叶子两两路径满足条件即可,于是便可以贪心啦,从最外圈(叶子)开始一层一层选,选出前 k/2 层。
如果k是奇数的话,还可以多选一个不是前 k/2 层的点。
#include#define ll long longusing namespace std;#define pb push_backconst int N=1e6+5;inline int read(){ int x=0; char ch=getchar(); for(;!isdigit(ch);ch=getchar()); for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0'; return x;}vector g[N];queue q;int n,k,len[N],ans,l,d[N];bool flag;inline void solve(){ for(int x;!q.empty();q.pop()){ x=q.front(); for(int j=g[x].size()-1,i;j>=0;j--){ i=g[x][j]; if((--d[i])==1) q.push(i),len[i]=len[x]+1; } }}int main(){ n=read(),k=read(),l=k>>1; for(int i=1,uu,vv;i