RT
#include<bits/stdc++.h>
using namespace std;
int cnt1,cnt2,head1[10005],head2[10005];
int n,m,k,s,t;
struct e
{
int u,v,w,next;
}edge1[10005],edge2[10005];
void add(int u ,int v,int w)
{
edge1[ ++ cnt1] = (e){u,v,w,head1[u]};
head1[u] = cnt1;
edge2[ ++ cnt2] = (e){v,u,w,head2[v]};
head2[v] = cnt2;
}
int dis[10005];
void dijkstra()
{
priority_queue<pair<int,int>,vector<pair<int,int > >,greater<pair<int,int> > >q;
bool bz[10005] = {};
bz[1] = 1;
q.push(make_pair(0,1));
memset(dis,0x3f,sizeof(dis));
dis[1] = 0;
while(!q.empty())
{
pair<int,int>u = q.top();
q.pop();
if(bz[u.second])continue;
bz[u.second] = 1;
for(int i = head2[u.second];i;i = edge2[i].next)
{
int v = edge2[i].v;
if(dis[v] > dis[u.second] + edge2[i].w)
{
dis[v] = dis[u.second] + edge2[i].w;
q.push(make_pair(dis[v],v));
}
}
}
}
struct node
{
int num,g;
};
bool operator >(node s1,node s2)
{
return s1.g + dis[s1.num] > s2.g + dis[s2.num];
}
void A_star(int &res)
{
priority_queue<node,vector<node>,greater<node> >q;
q.push((node){n,0});
while(!q.empty())
{
node u = q.top();
q.pop();
if(u.num == 1)
{
res --;
cout << u.g << endl;
if(!res)return;
}
for(int i = head1[u.num];i;i = edge1[i].next)
{
int v = edge1[i].v;
q.push((node){v,u.g + edge1[i].w});
}
}
}
int main()
{
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
cin >> n >> m >> k >> s >> t;
for(int i = 1;i <= m;i ++)
{
int u,v,w;
cin >> u >> v >> w;
add(u,v,w);
}
A_star(k);
while(k --)cout << -1 << endl;
return 0;
}
忘记调用dijkstra了,仍然ACqwq