专门打这个部分部分分的
代码如下:
#include<bits/stdc++.h>
using namespace std;
int T,n;
int num[2500];
int num2[2500];
vector<int> B[2500];
int D[2500];
int a[2500];
namespace P3_7{
//挂
void dfs(int s, int e, int len){
//cout<<s<<" "<<e<<" "<<len<<endl;
//for(int i = 1; i<=n; i++){
// cout<<a[i]<<' ';
// }
// cout<<endl;
if(len==0) {
for(int i = 1; i<=n; i++){
cout<<a[i]<<' ';
}
cout<<'\n';
return;
}
int minn=a[s],mini=s;
for(int i = s; i<=e; i++){
if(a[i]<minn) minn=a[i],mini=i;
}
swap(a[mini],a[s-1]);
for(int i = mini; i>s; i--){
swap(a[i],a[i-1]);
}
dfs(mini+1,e,e-mini);
}
void Main(){
dfs(2,n,n);
return ;
}
}
inline bool judge_37(){
if((D[num[1]]^1)||(D[num[n]]^1)) return false;
for(int i = 2; i<n; i++){
if(D[num[i]]^2) return false;
}
//cout<<1111111111111111111;
return true;
}
int main(){
ios::sync_with_stdio(false);
cin>>T;
while(T--){
cin>>n;
for(int i = 1; i<=n; i++) B[i].clear();
memset(num,0,sizeof(num));
memset(num2,0,sizeof(num2));
memset(a,0,sizeof(a));
memset(D,0,sizeof(D));
for(int i = 1; i<=n; i++){
cin>>num[i];
//if(num[i]==3) cout<<i<<endl;
num2[num[i]]=i;
}
for(int i = 1; i<=n; i++) a[i]=num[i];
for(int i = 1; i<n; i++){
int x,y;
cin>>x>>y;
B[x].push_back(y);
B[y].push_back(x);
D[x]++;
D[y]++;
}
//for(int i = 1; i<=n; i++){
// cout<<num2[i]<<" ";
//}
if(judge_37()){
P3_7::Main();
}
}
return 0;
}