cf29d 深搜,dfs序

时间:2025-02-22 20:07:32
#include<bits/stdc++.h>
using namespace std;
#define maxn 500
struct Edge{int to,nxt;}edge[maxn<<];
int n,head[maxn],tot,a[maxn],k;
vector<int>v;
void init(){
memset(head,-,sizeof head);
k=tot=;
}
void addedge(int u,int v){
edge[tot].to=v;edge[tot].nxt=head[u];head[u]=tot++;
}
bool dfs(int root,int u,int pre)
{
if(root==u)return ;
for(int i=head[u]; i>=; i=edge[i].nxt)
{
int vv=edge[i].to;
if(vv==pre)continue;
if(dfs(root,vv,u))
{
v.push_back(u);
return ;
}
}
return ;
}
int main(){
init(); cin>>n;
for(int i=;i<n;i++){
int u,v;cin>>u>>v;
addedge(u,v);
addedge(v,u);
}
int u;
while(cin>>u)a[++k]=u;
v.push_back();
dfs(,a[],);
int last=a[]; for(int i=;i<=k;i++)
dfs(last,a[i],),last=a[i];
dfs(a[k],,);
if(v.size()!=*n-)puts("-1");
else {
for(int i=;i<v.size();i++)
printf("%d ",v[i]);
printf("\n");
}
}