本蒟蒻能力不行,dijkstra堆优化wa了五个点,跪求da lao帮调代码
#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
using namespace std;
const int maxn=10010;
priority_queue<pair<int,int> ,vector<pair<int,int> >,greater<pair<int,int> > > q;
int n,m,w;
char u,v;
struct node{
int to;
int w;
int nxt;
}edge[maxn*2];
int tot,head[maxn*2];
int dis[maxn];
int vis[maxn];
void add(int u,int v,int w)
{
edge[++tot].to=v;
edge[tot].w=w;
edge[tot].nxt=head[u];
head[u]=tot;
}
int main()
{
memset(dis,inf,sizeof(dis));
memset(vis,0,sizeof(vis));
scanf("%d",&n);
for(int i=1;i<=n;++i)
{
cin>>u>>v;
int U,V;
if(u>='a'){
U=int(u-96);
V=int(v-38);
}
else{
V=int(v-96);
U=int(u-38);
}
scanf("%d",&w);
add(U,V,w);
add(V,U,w);
}
dis[52]=0;
q.push(make_pair(0,52));
while(!q.empty())
{
int x=q.top().second;
q.pop();
if(vis[x]==1) continue;
vis[x]=1;
for(int i=head[x];i!=0;i=edge[i].nxt)
{
if(dis[edge[i].to]>dis[x]+edge[i].w){
dis[edge[i].to]=dis[x]+edge[i].w;
q.push(make_pair(dis[edge[i].to],edge[i].to));
}
}
}
int mincow=INT_MAX,k;
for(int i=27;i<=51;i++)
{
if(mincow>dis[i])
{
mincow=dis[i];
k=i+38;
}
}
cout<<char(k)<<" "<<mincow<<endl;
return 0;
}