求助!!!
查看原帖
求助!!!
542905
WannaYellow楼主2021/11/28 18:32

样例都过了,但是全wa

#include<queue>
#include<map>
#include<string>
#include<cstdio>
#include<iostream>
#define int long long
#define MAXM 1005
#define INF 0x7fffffff
using namespace std;
int n;
struct EDGE{
	int to;
	int val,next;
}e[MAXM];
map<string,int>mp;
int cnt,cntn,head[MAXM];
void addedge(string u,string v,int val){
	if(mp[u]==0)mp[u]=++cntn;
	if(mp[v]==0)mp[v]=++cntn;
	e[++cnt].to=mp[v];
	e[cnt].val=val;
	e[cnt].next=head[mp[u]];
	head[mp[u]]=cnt;
}
struct NODE{
	int pos;
	int dis;
	bool operator<(const NODE &x)const{
		return x.dis<dis;	
	}
};
priority_queue<NODE>pq;
int dis[MAXM][MAXM]={},vis[MAXM][MAXM]={},viss[MAXM];
void DJ(string a){
	for(int i=1;i<=n;i++){
		dis[mp[a]][i]=INF;
	}
	dis[mp[a]][mp[a]]=0;
	pq.push(NODE{mp[a],0});
	while(!pq.empty()){
		NODE cur=pq.top();
		pq.pop();
		int tmp=cur.pos;
		if(vis[mp[a]][tmp]==1)continue;
		vis[mp[a]][tmp]=1;
		for(int i=head[tmp];i;i=e[i].next){			
			if(dis[mp[a]][e[i].to]>dis[mp[a]][tmp]+e[i].val){
			//	cout<<"yea"<<endl;
				dis[mp[a]][e[i].to]=dis[mp[a]][tmp]+e[i].val;
				pq.push(NODE{e[i].to,dis[mp[a]][e[i].to]});
			}
		}
	}
	
}
signed main(){
	int m;
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		string u,v;
		int w;
		cin>>u>>v>>w;
		addedge(u,v,w);
	}
	int q;
	cin>>q;
	for(int i=1;i<=q;i++){
		string u,v;
		cin>>u>>v;
		if(mp[u]==0){
			cout<<"Roger\n";
			continue;
		}
		DJ(u);
		if(dis[mp[u]][mp[v]]==INF)
		cout<<"Roger\n";
		else
		cout<<dis[mp[u]][mp[v]]<<endl;
	}
	return 0;
}
2021/11/28 18:32
加载中...