全RE求助
查看原帖
全RE求助
359475
Tom_yyt楼主2021/7/25 19:56
#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
using namespace std;
const int MAXM=100001;
int n,np=0,first[101];
bool tag[101]={0},vis[101]={0};
struct data{
	int next,to,len;
}E[MAXM<<1];
struct patch{
	int id,dis;
}dist[101];
void addlink(int a,int b,int len)
{
	E[++np]=(data){first[a],b,len};
	first[a]=np;
}
struct info{
	int id,dis;
	friend bool operator<(info a,info b)
	{
		return a.dis>b.dis;
	}
};
bool cmp(patch a,patch b)
{
	return a.dis<b.dis;
}
void dij()
{
	for(int i=0;i<=100;i++) dist[i].dis=inf;
	dist[25].dis=0;
	priority_queue<info>q;
	q.push((info){25,0});
	while(!q.empty())
	{
		info x=q.top();
		int i=x.id;
		dist[i].id=i;
		q.pop();
		if(vis[i]) continue;
		vis[i]=1;
		for(int p=first[i];p;p=E[p].next)
		{
			int j=E[p].to;
			if(dist[j].dis>x.dis+E[p].len)
			{
				dist[j].dis=x.dis+E[p].len;
				q.push((info){j,dist[j].dis});
			}
		}
	}
}
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		char a,b;
		int u,v,dis;
		getchar();
		scanf("%c",&a);
		getchar();
		scanf("%c%d",&b,&dis);
		u=a-'A';
		if(a>='A'&&a<='Y')
			tag[u]=1;
		v=b-'A';	
		if(b>='A'&&b<='Y')
			tag[v]=1;
		if(u==v) continue;		
		addlink(u,v,dis);
		addlink(v,u,dis);
	}
	dij();
	sort(dist,dist+100,cmp);
	for(int i=0;i<=100;i++)
	{
		if(tag[dist[i].id])
		{
			printf("%c %d",dist[i].id+'A',dist[i].dis);
			break;
		}
	}
	return 0;
}
/*
5
A d 6
B d 3
C e 9
d Z 8
e Z 3
*/
2021/7/25 19:56
加载中...