记录编号 |
513327 |
评测结果 |
MMMMMMMMMMMMM |
题目名称 |
[USACO Jan08] 架设电话线 |
最终得分 |
0 |
用户昵称 |
pztl |
是否通过 |
未通过 |
代码语言 |
C++ |
运行时间 |
0.000 s |
提交时间 |
2018-10-10 15:29:44 |
内存使用 |
0.00 MiB |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
struct edge{
int to;int dis;int next;
};
struct node{
int now;int nowk;int nowdis;
};
node q[1000000+666];
edge e[10000*3+666];
int h[1000+666];
int p,hh,tt;
int n,m,k;
int mink[1005][1005];
void add(int a,int b,int c)
{
p++;
e[p].next=h[a];
e[p].to=b;
e[p].dis=c;
h[a]=p;
return ;
}
inline void in(int now,int k,int dis)
{
q[tt].now=now;
q[tt].nowk=k;
q[tt].nowdis=dis;
tt++;
if(tt==1000000+666)
tt=0;
return;
}
void bfs()
{
while(hh!=tt)
{
int now,nowk,nowdis;
now=q[hh].now;nowk=q[hh].nowk;nowdis=q[hh].nowdis;
hh++;
if(hh==1000000+666)
hh=0;
for(int i=h[now];i;i=e[i].next)
{
int to=e[i].to;
if(max(nowdis,e[i].dis)<mink[to][nowk])
{
mink[to][nowk]=max(nowdis,e[i].dis);
in(to,nowk,max(nowdis,e[i].dis));
}
if(nowdis<mink[to][nowk+1]&&nowk<k)
{
mink[to][nowk+1]=nowdis;
in(to,nowk+1,nowdis);
}
}
}
}
int main()
{
freopen("phoneline.in","r",stdin);
freopen("phoneline.out","w",stdout);
cin>>n>>m>>k;
for(int i=1;i<=m;i++)
{
int a,b,c;
cin>>a>>b>>c;
add(a,b,c);
add(b,a,c);
}
in(1,0,0);
memset(mink,0x3f,sizeof(mink));
for(int i=0;i<=k;i++)
mink[1][i]=0;
bfs();
int ans=0x7fffffff;
for(int i=0;i<=k;i++)
ans=min(ans,mink[n][i]);
if(ans==0x3f3f3f3f)
cout<<"-1"<<endl;
else
cout<<ans<<endl;
return 0;
}