比赛 |
2024暑假C班集训A |
评测结果 |
AAAAAAAAAA |
题目名称 |
行动!行动! |
最终得分 |
100 |
用户昵称 |
小金 |
运行时间 |
0.199 s |
代码语言 |
C++ |
内存使用 |
4.67 MiB |
提交时间 |
2024-07-10 11:52:15 |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
int h[10010],tot,n,m,s,t,k;
int dis[10010][15],ans=0x3f3f3f3f,vis[10010][15];
struct cod{
int u,v,w;
}e[200010];
struct coc{
int u,d,used;
bool operator <(const coc&a) const
{
return d>a.d;
}
};
void add(int x,int y,int z)
{
tot++;
e[tot].u=h[x];
e[tot].v=y;
e[tot].w=z;
h[x]=tot;
}
void dijkstra()
{
memset(dis,0x3f,sizeof(dis));
dis[s][0]=0;
priority_queue<coc>q;
q.push((coc){s,0,0});
while(!q.empty())
{
int u=q.top().u;
int now=q.top().used;
q.pop();
if(vis[u][now]) continue;
vis[u][now]=1;
for(int i=h[u];i;i=e[i].u)
{
int y=e[i].v;
if(now<k&&!vis[y][now+1]&&dis[y][now+1]>dis[u][now])
{
dis[y][now+1]=dis[u][now];
q.push((coc){y,dis[y][now+1],now+1});
}
if(!vis[y][now]&&dis[y][now]>dis[u][now]+e[i].w)
{
dis[y][now]=dis[u][now]+e[i].w;
q.push((coc){y,dis[y][now],now});
}
}
}
}
int main()
{
freopen("move.in","r",stdin);
freopen("move.out","w",stdout);
scanf("%d%d%d",&n,&m,&k);
scanf("%d%d",&s,&t);
s++;
t++;
int x,y,z;
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&z);
x++;
y++;
add(x,y,z);
add(y,x,z);
}
dijkstra();
for(int i=0;i<=k;i++)
{
ans=min(ans,dis[t][i]);
}
printf("%d",ans);
}