P4568 [JLOI2011]飞行路线
#include <bits/stdc++.h>
using namespace std;
int n,m,k;
int s,t;
struct node
{
int v,d;
};
struct no1
{
int v,d,k;
bool operator < (const no1 &y)const
{
if(d == y.d)
{
return k > y.k;
}
return d > y.d;
}
};
vector <node> e[10000];
int dis[10000][11];
int vis[10000][11];
int ans;
void dij(int x)
{
priority_queue<no1> q;
q.push(no1{x,0,0});
dis[x][0] = 0;
while(!q.empty())
{
no1 v = q.top();
q.pop();
if(vis[v.v][v.k])continue;
if(v.v == t)
{
ans = v.d;
break;
}
vis[v.v][v.k] = 1;
int maxx = e[v.v].size();
for (int i = 0; i < maxx; i++)
{
int u = e[v.v][i].v;
int d = e[v.v][i].d;
if(vis[u][v.k] == 0 && dis[u][v.k] > dis[v.v][v.k] + d)//不免费
{
dis[u][v.k] = dis[v.v][v.k] + d;
q.push(no1{u,dis[u][v.k],v.k});
}
if(v.k < k && vis[u][v.k + 1] == 0 && dis[u][v.k + 1] > dis[v.v][v.k])//免费
{
dis[u][v.k + 1] = dis[v.v][v.k];
q.push(no1{u,dis[u][v.k + 1],v.k + 1});
}
}
}
}
int main()
{
int a,b,c;
cin >> n >> m >> k;
cin >> s >> t;
for (int i = 1; i <= m; i++)
{
cin >> a >> b >> c;
e[a].push_back(node{b,c});
e[b].push_back(node{a,c});
}
memset(dis,0x3f,sizeof(dis));
dij(s);
cout << ans;
return 0;
}
分层图最短路板题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通