题目链接:https://ac.nowcoder.com/acm/problem/15522
就是一道很常规的dijskstra题,虽然我自己debug 疯了(丢脸>_<)
#include<bits/stdc++.h>
using namespace std;
const int N=2e6+10;
int n,p,k;
int q[N],tt=-1,hh;
bool st[N];
int e[N],ne[N],idx,w[N],h[N];
int u,v,l;
int dist[N];
void add(int u,int v,int l)
{
e[idx]=v;
w[idx]=l;
ne[idx]=h[u];
h[u]=idx++;
}
void dijkstra()
{
memset(dist,0x3f3f3f3f,sizeof dist);
//st[p]=1;//这里我之前以为也要处理,结果就WA了,可以看后面,如果这里将p处理了,那么后面就直接continue;
q[++tt]=p;
dist[p]=0;
while(tt>=hh)
{
int x=q[hh++];
if(st[x])continue;
st[x]=1;
for(int i=h[x];i!=-1;i=ne[i])
{
int j=e[i];
if(dist[j]>dist[x]+w[i])
{
dist[j]=dist[x]+w[i];
q[++tt]=j;
}
}
}
}
int main()
{
cin>>n>>p>>k;
memset(h,-1,sizeof h);
for(int i=1;i<n;i++)
{
cin>>u>>v>>l;
add(u,v,l);
add(v,u,l);
}
dijkstra();
sort(dist+1,dist+1+n);
cout<<dist[k+1];
return 0;
}