题目大意: 有n个点,n-1条边的无向图;每个点存着一个字符; 给你这个图,求从1号节点出发的线路,使得这条路线的字典序最大
目前怀疑是bfs的过程出了问题
我的代码:
#include<iostream>
#include<cstdio>
#include<vector>
#include<queue>
#include<stack>
using namespace std;
int n,m,a,b,d,num,fa[1000050];char p[1000050];
queue <int> li;
stack <char> ans;
struct k{
int de;int fa;char p;bool v=0;
vector <int> q;
}po[1000050];
void prt(int now){
ans.push(po[now].p);
if(now!=1)prt(po[now].fa);
}
void bfs(int now){
if(!po[now].v){
po[now].v=1;
char t=po[po[now].q[0]].p;int ti=0;
for(int i=0;i<(int)po[now].q.size();i++){
if(po[now].fa!=po[now].q[i])po[po[now].q[i]].fa=now;
if(po[po[now].q[i]].p>t&&!po[po[now].q[ti]].v){
t=po[po[now].q[i]].p;ti=i;
}
}
for(;ti<(int)po[now].q.size();ti++){
if(po[po[now].q[ti]].p==t&&!po[po[now].q[ti]].v){
li.push(po[now].q[ti]);
}
}
}
if((int)li.size()>1)li.pop();
if((int)li.size()==1){
if((int)po[now].q.size()==1) prt(now);
else bfs(li.front());
}
bfs(li.front());
}
int main(){
//freopen("road.in","r",stdin);
//freopen("road.out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++)cin>>po[i].p;
for(int i=1;i<n;i++){
cin>>a>>b;
po[a].q.push_back(b);po[b].q.push_back(a);
}
bfs(1);
//for(int i=1;i<=n;i++)cout<<po[i].fa<<" ";
//cout<<ans.size()<<" ";
while(!ans.empty()){
cout<<ans.top();ans.pop();
}
//fclose(stdin);fclose(stdout);
return 0;
}
感激不尽!!!