RT,似乎是RE了,救救我(
站外题 https://hdnoip.cn/problem.php?id=1334
stOOOOOO OOOOOOrz
#include <stdio.h>
#include <queue>
#include <iostream>
#include <string.h>
using namespace std;
#define rint register int
#define ll long long
const int MAXN=2505,MAXM=6205;
int read(int &w)
{
w=0;char ch=getchar();int f=1;
for(;!(ch>='0'&&ch<='9');ch=getchar())if(ch=='-')f=-1;
for(;(ch>='0'&&ch<='9');ch=getchar())w=(w<<1)+(w<<3)+(ch^48);
w*=f;
}
int tot=0,n,m,Start,End;
int head[MAXN],dis[MAXN],vis[MAXN];
struct Edge
{
int to,le,nxt;
Edge(){to=0;le=0;nxt=0;}
};
Edge a[MAXM];
void add(int x,int y,int z)
{
tot++;
a[tot].to=y;
a[tot].le=z;
a[tot].nxt=head[x];
head[x]=tot;
}
void Dijkstra()
{
memset(dis,0x3f,sizeof(dis));
memset(vis,0,sizeof(vis));
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > >q;
dis[Start]=0;
q.push(make_pair(0,Start));
while(q.size())
{
int tmp=q.top().second;q.pop();
if(vis[tmp]) continue;
vis[tmp]=1;
for(rint i=head[tmp];i;i=a[i].nxt)
{
int t=a[i].to; if(vis[t])continue;
if(dis[t]>dis[tmp]+a[i].le)
{
dis[t]=dis[tmp]+a[i].le;
q.push(make_pair(dis[t],t));
}
}
}
printf("%d",dis[End]);
}
int main()
{
read(n);read(m);read(Start);read(End);
for(rint i=1;i<=m;i++)
{
int x,y,z;
read(x);read(y);read(z);
add(x,y,z);
add(y,x,z);
}
Dijkstra();
return 0;
}