40分(满分70)spfa求调,WA#2,#3,#4,马蜂良好
查看原帖
40分(满分70)spfa求调,WA#2,#3,#4,马蜂良好
946218
ForEly楼主2024/11/26 09:47
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+10;
const int inf=LONG_LONG_MAX;
int h[N],val[N],to[N],nxt[N],dis[N],vis[N];
int n,m,q,cnt,id;
unordered_map<string,int> a;
inline void add(int u,int v,int w){
	to[++cnt]=v;
	val[cnt]=w;
	nxt[cnt]=h[u];
	h[u]=cnt;
}
inline void init(){
	for(int i=1;i<=n;i++){
		dis[i]=inf;
	}
	memset(vis,0,sizeof(vis));
}
inline void spfa(int x){
	queue<int> q;
	init();
	dis[x]=0;
	q.push(x);
	while(!q.empty()){
		int now=q.front();
		q.pop();
		if(vis[now])
			continue;
		vis[now]=1;
		for(int i=h[now];i;i=nxt[i]){
			int v=to[i];
			if(dis[v]>dis[now]+val[i]){
				dis[v]=dis[now]+val[i];
				q.push(v);
			}
		}
	}
}
signed main(){
	scanf("%lld%lld",&n,&m);
	for(int i=1,t;i<=m;i++){
		string x,y;
		cin>>x>>y>>t;
		if(!a[x])
			a[x]=++id;
		if(!a[y])
			a[y]=++id;
		add(a[x],a[y],t);
	}
	scanf("%lld",&q);
	while(q--){
		string x,y;
		cin>>x>>y;
		spfa(a[x]);
		if(dis[a[y]]==inf)
			printf("Roger\n");
		else
			printf("%lld\n",dis[a[y]]);
	}
	return 0;
}
2024/11/26 09:47
加载中...