1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
| #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cstdlib> #include<vector> using namespace std;
const int MAXN=5e4+5;
struct ed{ int to,w,nex; bool u; };
ed e[MAXN]; int head[MAXN],f[MAXN],v[MAXN],rd[MAXN]; int newp,n,m; vector<int> tmp;
void vAdd(int p1,int p2,int w); void dfs(int x,int tot);
int main(){ freopen("track.in","r",stdin); freopen("track.out","w",stdout); scanf("%d%d",&n,&m); int s=0; int zx=0x3f3f3f3f; bool ddyy=1; for(int i=1;i<=n;++i){ int p1,p2,w; scanf("%d%d%d",&p1,&p2,&w); if(p1!=1)ddyy=0; tmp.push_back(w); zx=min(zx,w); vAdd(p1,p2,w); vAdd(p2,p1,w); } if(m==n-1){ printf("%d\n",zx); } else if(ddyy){ sort(tmp.begin(),tmp.end()); printf("%d\n",n-m); } else{ for(int i=1;i<=n;++i){ memset(v,0,sizeof(v)); dfs(i,0); } sort(f+1,f+1+n); printf("%d\n",f[n-m+1]); } fclose(stdin); fclose(stdout); return 0; }
void vAdd(int p1,int p2,int w){ ++newp; e[newp].to=p2; e[newp].w=w; e[newp].nex=head[p1]; head[p1]=newp; }
void dfs(int x,int tot){ v[x]=1; if(tot>f[x])f[x]=tot; for(int i=head[x];i;i=e[i].nex){ int y=e[i].to; if(!v[y]){ dfs(y,tot+e[i].w); } } }
|