就#1,#6过了!求救!堆优化dijkstra!!
查看原帖
就#1,#6过了!求救!堆优化dijkstra!!
746339
goodluck_hao_2007楼主2022/8/18 23:47
#include <bits/stdc++.h>
using namespace std;
const int N=100010;
priority_queue<pair<int,int> > q;
int m,head[50],ver[N],Next[N],edge[N],idx;
long long dist[50];
bool st[50];
bool big[50];
void add(int x,int y,int z)
{
	ver[++idx]=y;
	edge[idx]=z;
	Next[idx]=head[x];
	head[x]=idx;
}
void dijkstra()
{
	memset(dist,0x3f,sizeof(dist));
	memset(st,0,sizeof(st));
	dist[1]=0;
	q.push(make_pair(0,1));
	while(q.size())
	{
		int x=q.top().second; q.pop();
		if(st[x]) continue;
		st[x]=1;
		for(int i=head[x];i;i=Next[i])
		{
			int y=ver[i],z=edge[i];
			if(dist[y]>dist[x]+z)
			{
				dist[y]=dist[x]+z;
				q.push(make_pair(-dist[y],y));
			}
		}
	}
}
int main()
{
	cin>>m;
	while(m--)
	{
		char x,y;
		int z;
		cin>>x>>y>>z;
		if(x>='A'&&x<'Z') big[int(x)-63]=1;
		if(y>='A'&&y<'Z') big[int(y)-63]=1;
		int o,p;
		if(x>='A'&&x<='Y') o=int(x)-63;
		else if(x>='a'&&x<='y') o=int(x)-95;
		if(y>='A'&&y<='Y') p=int(y)-63;
		else if(y>='a'&&y<='y') p=int(y)-95;
		if(x=='Z') o=1;
		if(y=='Z') p=1;
		add(o,p,z);
		add(p,o,z);
	}
	dijkstra();
	int num=1e9;
	int ans=0;
	for(int i=2;i<=26;i++)
	{
		if(big[i]==1)
		{
			if(num>=dist[i])
			{
				num=dist[i];
				ans=i;
			}
		}
	}
	cout<<char(ans+63)<<' '<<num;
	return 0;
}
2022/8/18 23:47
加载中...