比赛 2026.3.14 评测结果 AWWWWWWWWWWWWWWWWWWWWW
题目名称 Lexicographically Smallest Path 最终得分 4
用户昵称 2_16鸡扒拌面 运行时间 5.808 s
代码语言 C++ 内存使用 14.21 MiB
提交时间 2026-03-14 12:58:41
显示代码纯文本
#include<bits/stdc++.h>
#define MAXN 200005
using namespace std;

int T,n,m;
vector<pair<int,char> > g[MAXN];
int d[MAXN],v[MAXN];
queue<int> q;

int main()
{
	freopen("Path.in","r",stdin);
	freopen("Path.out","w",stdout);
	cin>>T;
	while(T--) 
	{
		cin>>n>>m;
		for(int i=1;i<=n;i++) g[i].clear();
		for(int i=1;i<=m;i++)
		{
			int u,vv; char c[2];
			cin>>u>>vv>>c;
			g[u].push_back(make_pair(vv,c[0]));
			g[vv].push_back(make_pair(u,c[0]));
		}
		for(int i=1;i<=n;i++) d[i]=-1,v[i]=0;
		d[1]=0;
		q.push(1);
		for(char ch='a';ch<='z';ch++)
		{
			int sz=q.size();
			if(!sz) continue;
			vector<int> cur;
			while(sz--)
			{
				int u=q.front(); q.pop();
				cur.push_back(u);
				for(int i=0;i<g[u].size();i++)
				{
					int vv=g[u][i].first;
					char c=g[u][i].second;
					if(c!=ch) continue;
					if(d[vv]==-1)
					{
						d[vv]=d[u]+1;
						q.push(vv);
					}
					else if(v[vv]==0) v[vv]=1;
				}
			}
			for(int i=0;i<cur.size();i++) v[cur[i]]=0;
		}
		for(int i=1;i<=n;i++) cout<<d[i]<<" ";
		cout<<endl;
	}
	return 0;
}