求调SPFA
查看原帖
求调SPFA
212423
FrozenDream楼主2022/10/4 16:27

记录

#include<bits/stdc++.h>
using namespace std;
const int maxn=10005;
int cnt,n,m,w,dis[maxn],f[maxn],vis[maxn];
struct node {
	int first,second;
};
map<string,int> ind;
vector<node>a[maxn];
queue<int>q;
int inde(string x) {
	if(ind.find(x)==ind.end()) {
		ind[x]=cnt++;
	}
	return ind[x];
}
int main() {
	cin>>n>>m;
	for(int i=1; i<=m; i++) {
		int t;
		string x,y;
		cin>>x>>y>>t;
		a[inde(x)].push_back((node) {
			inde(y),t
		});
	}
	cin>>w;
	while(w--) {
		memset(dis,0x3f,sizeof(dis));
		memset(f,0,sizeof(f));
		memset(vis,0,sizeof(vis));
		string x,b;
		int k1,k2;
		cin>>x>>b;
		k1=inde(x);
		k2=inde(b);
		dis[k1]=0;
		q.push(k1);
		f[k1]=1;
		while(!q.empty()) {
			int k3=q.front();
			f[k3]=0;
			vis[k3]=1;
			q.pop();
			for(int i=0; i<a[k3].size(); i++) {
				if(dis[k3]+a[k3][i].second<dis[a[k3][i].first]) {
					dis[a[k3][i].first]=dis[k3]+a[k3][i].second;
					if(f[a[k3][i].first]==0) {
						q.push(a[k3][i].first);
						f[a[k3][i].first]=1;
					}
				}
			}
		}
		if(vis[k2]!=0)cout<<dis[k2]<<endl;
		else cout<<"Roger"<<endl;
	}
}
2022/10/4 16:27
加载中...