1 条题解
-
0
#include<bits/stdc++.h> using namespace std; const int N=1e4+10,K=22; #define PII pair<int,int> int d[N*K],v[N*K];vector<PII>G[N*K]; void dij() { memset(d,0x3f,sizeof(d));memset(v,0,sizeof(v)); priority_queue<PII,vector<PII>,greater<PII>>q; d[1]=0;q.push({0,1}); while(!q.empty()) { int x=q.top().second;q.pop(); if(v[x])continue;v[x]=1; for(auto i:G[x]) { int y=i.first,w=i.second; if(d[y]>d[x]+w) { d[y]=d[x]+w; q.push({d[y],y}); } } } } int main() { int n,m,k;cin>>n>>m>>k; for(int i=1;i<=m;i++) { int x,y,w;cin>>x>>y>>w; for(int j=0;j<=k;j++)G[x+j*n].push_back({y+j*n,w}); for(int j=0;j<=k;j++)G[y+j*n].push_back({x+j*n,w}); for(int j=0;j<k;j++)G[x+j*n].push_back({y+(j+1)*n,0}); for(int j=0;j<k;j++)G[y+j*n].push_back({x+(j+1)*n,0}); } dij(); int ans=0x3f3f3f3f; for(int i=1;i<=k+1;i++)ans=min(ans,d[i*n]); cout<<ans; return 0; }
- 1
信息
- ID
- 871
- 时间
- 2000ms
- 内存
- 228MiB
- 难度
- 5
- 标签
- 递交数
- 27
- 已通过
- 14
- 上传者