求助P1529
  • 板块学术版
  • 楼主唯有谔谔
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/7/13 16:08
  • 上次更新2023/10/27 20:37:46
查看原帖
求助P1529
158821
唯有谔谔楼主2022/7/13 16:08
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
int n,cut=1,head[10000001],d[1000001]; 
typedef pair<int,int> P;
struct th
{
    int next,g,to;
}a[1000001];
void add(int v,int u,int w)
{
	a[cut].to=u;
	a[cut].next=head[u];
	a[cut].g=w;
	head[u]=cut++;
}
int main()
{
	memset(head,-1,sizeof(head));
	memset(d,0x3f,sizeof(d));
	priority_queue<P,vector<P>,greater<P> > q;
	d[26]=0;
	q.push(P(0,26)); 
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		char q,p;
		int z;
		cin>>q>>p>>z;
		int x,y;
		if(q>='A'&&q<='Z')
		{
			x=int(q)-64;
			//cout<<x<<endl;
		}
		if(p>='A'&&p<='Z')
		{
			y=int(p)-64;
		}
		if(q>='a'&&q<='z')
		{
			x=int(q)-70;
		}
		if(p>='a'&&p<='z')
		{
			y=int(p)-70;
		}
		//cout<<x<<' '<<y<<endl;
		add(x,y,z);
	}
	while(!q.empty())
	{
		P p=q.top();
		q.pop();
		int u=p.second;
		if(d[u]<p.first) continue;
		for(int i=head[u];i!=-1;i=a[i].next)
		{
			int v=a[i].to;
			if(d[v]>d[u]+a[i].g)
			{
				d[v]=d[u]+a[i].g;
				q.push(P(d[v],v));
			}
		}
	}
	int mi=0x7fffffff;
	int mii;
	/*for(int i=1;i<=25;i++)
	{    
        cout<<d[i]<<' ';
	}*/
	for(int i=1;i<=25;i++)
	{
		if(mi>d[i])
		{
			mi=d[i];
			mii=i;
		}
	}
    cout<<char(mii+64);
	cout<<' '<<mi;
	return 0;
 } 

输出的是0x3f

2022/7/13 16:08
加载中...