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;
}