这个题可以不用堆优化,写个模板。
我不明白为什么加一个book数组标记一下就会wa,不加标记就ac,求大佬解答。
#include<iostream>
#include<algorithm>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
#define inf 1e9
const int N=1010;
int dis[N];
struct node
{
int to,w;
bool operator <(const node &s)const
{
return w>s.w;
}
};
vector<node>v[N];
int n,m;
void dij()
{
for(int i=0;i<=n;i++){
dis[i]=inf;
}
struct node now,next;
priority_queue<node>q;
now.to=1;
now.w=0;
q.push(now);
dis[1]=0;
while(!q.empty())
{
now=q.top();
q.pop();
for(int i=0;i<v[now.to].size();i++){
next=v[now.to][i];
if(dis[next.to]>dis[now.to]+next.w)
{
dis[next.to]=dis[now.to]+next.w;
q.push(next);
}
}
}
}
int main()
{
scanf("%d%d",&m,&n);
int x,y,z;
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&z);
v[x].push_back(node{y,z});
v[y].push_back(node{x,z});
}
dij();
printf("%d\n",dis[n]);
}