记录编号 513327 评测结果 MMMMMMMMMMMMM
题目名称 [USACO Jan08] 架设电话线 最终得分 0
用户昵称 Gravatarpztl 是否通过 未通过
代码语言 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;
    }