dijk瞎写样例输出都特离谱求助
查看原帖
dijk瞎写样例输出都特离谱求助
530180
KingPowers楼主2022/7/7 14:42

RT,好久没写最短路了来复习下,然后就写成了这狗样……

#include<bits/stdc++.h>
#define N 10005<<1
#define PII pair<int,int>
using namespace std;
struct edge
{
	int nxt,to,val;
	edge(int B=0,int C=0,int D=0){nxt=B,to=C,val=D;}	
}e[N];
int m,head[N],dis[N],cnt,ans=0x7fffffff;
bool vis[N];
char t1,t2,id;
priority_queue<PII>q;
void add_edge(int from,int to,int val)
{
	e[++cnt]=edge(head[from],to,val);
	head[from]=cnt;
}
void dijkstra(int s)
{
	memset(dis,0x3f,sizeof(dis));
	dis[s]=0;
	q.push(make_pair(-dis[s],0));
	while(q.size())
	{
		PII top=q.top();
		q.pop();
		int d=-top.first,p=top.second;
		if(vis[p]) continue;
		vis[p]=1;
		for(int i=head[p];i;i=e[i].nxt)
		{
			int to=e[i].to,val=e[i].val,newd=dis[p]+val;
			if(dis[to]>newd)
			{
				dis[to]=newd;
				q.push(make_pair(-newd,to));
			}
		}
	}
}
signed main()
{
	cin>>m;
	for(int i=1,w;i<=m;i++)
	{
		cin>>t1>>t2>>w;
		add_edge(t1,t2,w);
		add_edge(t2,t1,w);
	}
	dijkstra('Z');
	for(int i=1;i<=128;i++)
		if(dis[i]<ans&&i>='A'&&i<='Y')
			ans=dis[i],id=(char)i;
	cout<<id<<' '<<ans;
}
2022/7/7 14:42
加载中...