2018.11.06 洛谷P1099 树网的核(最短路+枚举)

时间:2023-03-09 09:32:09
2018.11.06 洛谷P1099 树网的核(最短路+枚举)

传送门

之前看李煜东的书一直感觉是道神题。

然后发现这题数据范围只有300?300?300?

直接上floydfloydfloyd然后暴力就完了啊。

代码:

#include<bits/stdc++.h>
using namespace std;
inline int read(){
    int ans=0;
    char ch=getchar();
    while(!isdigit(ch))ch=getchar();
    while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
    return ans;
}
const int N=305;
int dis[N][N],n,s;
int main(){
    n=read(),s=read(),memset(dis,0x3f,sizeof(dis));
    for(int i=1,u,v;i<n;++i)u=read(),v=read(),dis[u][v]=dis[v][u]=read();
    for(int k=1;k<=n;++k){
        dis[k][k]=0;
        for(int i=1;i<=n;++i)for(int j=1;j<=n;++j)dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
    }
    int ans=dis[0][0];
    for(int i=1;i<=n;++i){
        for(int j=1;j<=n;++j){
            if(dis[i][j]<=s){
                int tmp=0;
                for(int k=1;k<=n;++k)tmp=max(tmp,dis[i][k]+dis[j][k]-dis[i][j]);
                ans=min(ans,tmp/2);
            }
        }
    }
    cout<<ans;
    return 0;
}