估计是读入的问题,改了之后仍有#567RE,本地能运行,洛谷不能运行。
查看原帖
估计是读入的问题,改了之后仍有#567RE,本地能运行,洛谷不能运行。
376467
QDHSLGYYJK楼主2021/7/12 20:44
#include<cstdio>
#include<algorithm>
#include<queue>
#include<cstring> 
using namespace std;
const int N=255,M=20005;
int h[N],nxt[M],v[M],e[M],d[N],m,len,ans;
bool b[N];
struct node{
	int p,d;
	bool operator <(const node &a)const{
		return d>a.d;
	}
};
priority_queue<node> q;
void dijsktra(int p){
	q.push(node{p,d[p]});
	while (!q.empty()){
		int x=q.top().p;q.pop();
		if (b[x]) continue;
		b[x]=1;
		for (int i=h[x];i;i=nxt[i]){
			int y=v[i];
			if (d[y]>d[x]+e[i]){
				d[y]=d[x]+e[i];
				q.push(node{y,d[i]});
			}
		} 
	}
}
void add(int x,int y,int z){
	v[++len]=y;
	e[len]=z;
	nxt[len]=h[x];
	h[x]=len;	
}
void read(char &ch){
	ch=getchar();
	while ((ch<'a'||ch>'z')&&(ch<'A'||ch>'Z'))
		ch=getchar();
}
int main(){
//	freopen("P1529_5.in","r",stdin);
	scanf("%d",&m);
	memset(d,0x3f,sizeof(d));
	for (int i=1;i<=m;++i){
		char a,b;int z;
		read(a);read(b);scanf("%d",&z);
		int x=a,y=b;
		add(x,y,z);
		add(y,x,z);
	}
	d[90]=0;
	dijsktra(90);
	for (int i=65;i<=89;++i)
		if (d[i]<d[ans]) 
			ans=i;
	printf("%c %d",ans,d[ans]);
//	fclose(stdin);
	return 0;
}
2021/7/12 20:44
加载中...