飞行路线求助
  • 板块灌水区
  • 楼主molly1212
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/10/5 16:32
  • 上次更新2024/10/5 18:02:32
查看原帖
飞行路线求助
556017
molly1212楼主2024/10/5 16:32

飞行路线
最后一个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;
}
2024/10/5 16:32
加载中...