比赛 2026.3.14 评测结果 AWWWWWWWWWWWWWWWWWWWWW
题目名称 Lexicographically Smallest Path 最终得分 4
用户昵称 yyswys 运行时间 3.408 s
代码语言 C++ 内存使用 16.72 MiB
提交时间 2026-03-14 10:45:05
显示代码纯文本
#include<bits/stdc++.h>

using namespace std;

const int N=2e5+5;
int t,n,m,ans[N];
vector<pair<int,char>> e[N];
int main(){
	freopen("Path.in","r",stdin);
	freopen("Path.out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin>>t;
	while(t--){
		cin>>n>>m;
		for(int i(1);i<=m;++i){
			int u,v;
			char c;
			cin>>u>>v>>c;
			e[u].push_back({v,c});
			e[v].push_back({u,c});
		}
		for(int i(1);i<=n;++i){
			ans[i]=-1;
		}
		ans[1]=0;
		queue<pair<int,char>>q;
		q.push({1,'z'+1});
		while(!q.empty()){
			char s='z';
			queue<pair<int,char>> p;
			while(!q.empty()){
				auto [u,b]=q.front();
				q.pop();
				p.push({u,b});
				for(auto&[v,c]:e[u]){
					s=min(s,c);
				}
			}
			while(!p.empty()){
				auto [u,b]=p.front();
				p.pop();
				for(auto&[v,d]:e[u]){
					if(b==s&&ans[v]>-1&&d<=b){
						ans[v]=ans[u]+1;
						q.push({v,b});
					}
				}
			}
		}
		for(int i(1);i<=n;++i){
			cout<<ans[i]<<" ";
		}
		cout<<"\n";
	}
	return 0;
}