求卡时
  • 板块灌水区
  • 楼主Frielen
  • 当前回复5
  • 已保存回复5
  • 发布时间2024/10/15 21:41
  • 上次更新2024/10/16 05:06:13
查看原帖
求卡时
1125685
Frielen楼主2024/10/15 21:41

rt,代码:

#include<bits/stdc++.h>
using namespace std;
int n,w,e;
vector<int> q[1000009];
char a[1000009];
string ans="  ";
int rev(char c){
	return int(c-'a'+1);
}
string now;
void dfs(int k,int dad,string &now){
	now+=a[k];
	int Max=0;
    for(int i=0;i<q[k].size();i++) if(q[k][i]!=dad) Max=max(Max,rev(a[q[k][i]]));
	for(int i=0;i<q[k].size();i++){
		if(rev(a[q[k][i]])==Max&&q[k][i]!=dad){
			dfs(q[k][i],k,now);
		}
	}
	if(ans<now) ans=now;
    now.pop_back();
	return;
}
int main(){
	freopen("road.in","r",stdin);
	freopen("road.out","w",stdout);
	ios::sync_with_stdio(false);
    cin.tie(0);
    cout.flush();
	cin>>n;
	for(int i=1;i<=n;i++) cin>>a[i];
	for(int i=1;i<n;i++){
		cin>>w>>e;
		q[e].push_back(w);
		q[w].push_back(e);
	}
	dfs(1,-1,now);
	cout<<ans;
	return 0;
}
2024/10/15 21:41
加载中...