30分求救
查看原帖
30分求救
726870
Rainber楼主2023/7/18 13:56

记录

#include<cstdio>
#include<map>
#include<string>
#include<iostream>
using std::map;
using std::cin;
using std::string;
int n,m,path[1000][1000];
int queue[1000000];
long long dis[1000];
long long spfa(int s,int e)
{
	int i;
	for(i=0;i<n;++i)
	{
		dis[i]=1000000000000000ll;
	}
	dis[s]=0;
	queue[0]=s;
	int head=-1,tail=0;
	while(head<tail)
	{
		head++;
		for(i=0;i<n;++i)
		{
			if(path[queue[head]][i]!=0&&dis[i]>dis[queue[head]]+path[queue[head]][i])
			{
				dis[i]=dis[queue[head]]+path[queue[head]][i];
				queue[++tail]=i;
			}
		}
	}
	end:
		return dis[e];
}
int main()
{
	map<string,int> mapping;
	int total=1,i,w,p;
	long long ans;
	string r,t;
	scanf("%d%d",&n,&m);
	for(i=0;i<m;++i)
	{
		cin>>r>>t;
		scanf("%d",&w);
		if(!mapping[r])
		{
			mapping[r]=total++;
		}
		if(!mapping[t])
		{
			mapping[t]=total++;
		}
		path[mapping[r]-1][mapping[t]-1]=w;
	}
	scanf("%d",&p);
	for(i=0;i<p;++i)
	{
		cin>>r>>t;
		ans=spfa(mapping[r]-1,mapping[t]-1);
		if(ans==1000000000000000ll)
		{
			printf("Roger\n");
		}
		else
		{
			printf("%lld\n",ans);
		}
	}
	return 0;
}

大佬使劲喷,不用客气

2023/7/18 13:56
加载中...