飞行路线
最后一个hack数据过不了......
求助。
#include <bits/stdc++.h>
using namespace std;
#define ll long long
int n,m,k,s,t;
ll dis[100105];
bool used[100105];
typedef pair<int,int> pii;
struct note
{
int to,w;
};
vector<note> e[100105];
void Dijkstra()
{
memset(dis,0x3f,sizeof(dis));
dis[s] = 0;
priority_queue<pii,vector<pii>,greater<pii> > q;
q.push((pii){0,s});
while (!q.empty())
{
int now = q.top().second;
q.pop();
if (used[now]) continue;
used[now] = 1;
for (int i = 0;i < e[now].size();i++)
{
int v = e[now][i].to;
if (dis[v] > dis[now]+e[now][i].w)
{
dis[v] = dis[now]+e[now][i].w;
q.push((pii){dis[v],v});
}
}
}
}
int main()
{
scanf("%d%d%d%d%d",&n,&m,&k,&s,&t);
for (int i = 1;i <= m;i++)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
e[x].push_back((note){y,z});
e[y].push_back((note){x,z});
for (int j = 1;j <= k;j++)
{
e[x+n*j].push_back((note){y+n*j,z});
e[y+n*j].push_back((note){x+n*j,z});
e[x+n*(j-1)].push_back((note){y+n*j,0});
e[y+n*(j-1)].push_back((note){x+n*j,0});
}
}
Dijkstra();
cout << dis[t+k*n] << endl;
return 0;
}