Luogu1099 树网的核 (暴力?,floyd?)(还未想正解,暴力就A了)

阅读理解两小时,手敲暴力思考5分钟。然后\(n^3\)就A了
暴力代码

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#define R(a,b,c) for(register int  a = (b); a <= (c); ++ a)
#define nR(a,b,c) for(register int  a = (b); a >= (c); -- a)
#define Max(a,b) ((a) > (b) ? (a) : (b))
#define Min(a,b) ((a) < (b) ? (a) : (b))
#define Fill(a,b) memset(a, b, sizeof(a))
#define Abs(a) ((a) < 0 ? -(a) : (a))
#define Swap(a,b) a^=b^=a^=b
#define ll long long

#define ON_DEBUG

#ifdef ON_DEBUG

#define D_e_Line printf("\n\n----------\n\n")
#define D_e(x)  cout << #x << " = " << x << endl
#define Pause() system("pause")
#define FileOpen() freopen("in.txt","r",stdin);

#else

#define D_e_Line ;
#define D_e(x)  ;
#define Pause() ;
#define FileOpen() ;

#endif

struct ios{
    template<typename ATP>ios& operator >> (ATP &x){
        x = 0; int f = 1; char c;
        for(c = getchar(); c < '0' || c > '9'; c = getchar()) if(c == '-')  f = -1;
        while(c >= '0' && c <= '9') x = x * 10 + (c ^ '0'), c = getchar();
        x*= f;
        return *this;
    }
}io;
using namespace std;

const int N = 307;

int dis[N][N], D[N];
int vis[N];
int main(){
//FileOpen();
    int n, S;
    io >> n >> S;
    R(i,1,n){
        R(j,1,n){
            if(i != j)
                dis[i][j] = 2147483647;
        }
    }
    R(i,2,n){
        int u, v, w;
        io >> u >> v >> w;
        dis[u][v] = dis[v][u] =  w;
    }

    int DIS = 0;
    R(k,1,n){
        R(i,1,n){
            if(dis[i][k] == 2147483647) continue;
            R(j,1,n){
                if(dis[k][j] == 2147483647) continue;
                dis[i][j] = Min(dis[i][j], dis[i][k] + dis[k][j]);
                DIS = Max(DIS, dis[i][j]);
            }
        }
    }

    R(i,1,n){
        R(j,1,n){
            if(dis[i][j] == DIS){
                R(k,1,n){
                    if(dis[i][k] + dis[k][j] == dis[i][j]){
                        vis[k] = true;
                    }
                }
            }
        }
    }

    int ans = 2147483647;
    R(i,1,n){
        R(j,i,n){
            if(vis[i] && vis[j] && dis[i][j] <= S){
                R(xx,1,n) D[xx] = 2147483647;
                R(k,1,n){
                    if(dis[i][k] + dis[k][j] == dis[i][j]){
                        R(l,1,n){
                            D[l] = Min(D[l], dis[k][l]);
                        }
                    }
                }

                int maxx = 0;
                R(k,1,n){
                    maxx = Max(maxx, D[k]);
                }
                ans = Min(ans, maxx);
            }
        }
    }

    printf("%d", ans);

    return 0;
}

原文地址:https://www.cnblogs.com/bingoyes/p/11254395.html

时间: 2024-10-12 19:36:57

Luogu1099 树网的核 (暴力?,floyd?)(还未想正解,暴力就A了)的相关文章

树网的核[树 floyd]

描述 设T=(V, E, W) 是一个无圈且连通的无向图(也称为无根树),每条边到有正整数的权,我们称T为树网(treebetwork),其中V,E分别表示结点与边的集合,W表示各边长度的集合,并设T有n个结点. 路径:树网中任何两结点a,b都存在唯一的一条简单路径,用d(a, b)表示以a, b为端点的路径的长度,它是该路径上各边长度之和.我们称d(a, b)为a, b两结点间的距离. D(v, P)=min{d(v, u), u为路径P上的结点}. 树网的直径:树网中最长的路径成为树网的直径

POJ 3537 Crosses and Crosses(SG/还未想完全通的一道SG)

题目链接 #include<iostream> #include<cstdio> #include<cstring> using namespace std; int sg[2010]; int get_sg(int n) { if(n<0) return 0; if(sg[n]!=-1) return sg[n]; bool vis[2010]; //莫名其妙! //vis[]数组要声明在函数里,如果放外面会WA memset(vis,0,sizeof(vis)

最长公共子串_暴力解法(不会正解)

最长公共子串 lcs.cpp/.in/.out 计算两个字符串的最大公共子串(Longest Common Substring)的长度,字符不区分大小写,这里的最大公共子串要求的字串是连续的. 输入: 两行,每行一个字符串,字符串长度<=1000. 输出: 输出一个整数,表示公共子串的长度. 样例输入: asdfas werasdfaswer 样例输出: 6 下面上代码: 1 #include<bits/stdc++.h> 2 using namespace std; 3 char o[

NOIP 2007树网的核

题目描述 设T=(V, E, W) 是一个无圈且连通的无向图(也称为无根树),每条边到有正整数的权,我们称T为树网(treebetwork),其中V,E分别表示结点与边的集合,W表示各边长度的集合,并设T有n个结点. 路径:树网中任何两结点a,b都存在唯一的一条简单路径,用d(a, b)表示以a, b为端点的路径的长度,它是该路径上各边长度之和.我们称d(a, b)为a, b两结点间的距离. D(v, P)=min{d(v, u), u为路径P上的结点}. 树网的直径:树网中最长的路径成为树网的

[bzoj1999]树网的核

从下午坑到网上..原来noip的数据真是太弱了,若干的地方写挂结果还随便过= = 最坑的就是网上有些题解没考虑周全...然而noip数据太弱了noip数据太弱了noip数据太弱了 第一步是找直径,用两次bfs(或者dfs,Linux下系统栈挺大的..)解决.找出其中一条直径就可以了,虽然蒟蒻不会证明但是看起来似乎挺有道理的 要看证明的话可以看这个题解:http://trinklee.blog.163.com/blog/static/238158060201411175015709/ 直径上的路径

noip2007 树网的核

P1099 树网的核 112通过 221提交 题目提供者该用户不存在 标签动态规划树形结构2007NOIp提高组 难度提高+/省选- 提交该题 讨论 题解 记录 题目描述 设T=(V, E, W) 是一个无圈且连通的无向图(也称为无根树),每条边到有正整数的权,我们称T为树网(treebetwork),其中V,E分别表示结点与边的集合,W表示各边长度的集合,并设T有n个结点. 路径:树网中任何两结点a,b都存在唯一的一条简单路径,用d(a, b)表示以a, b为端点的路径的长度,它是该路径上各边

[BZOJ1999][codevs1167][Noip2007]Core树网的核

试题描述 设T=(V, E, W) 是一个无圈且连通的无向图(也称为无根树),每条边带有正整数的权,我们称T为树网(treenetwork),其中V, E分别表示结点与边的集合,W表示各边长度的集合,并设T有n个结点. 路径:树网中任何两结点a,b都存在唯一的一条简单路径,用d(a,b)表示以a,b为端点的路径的长度,它是该路径上各边长度之和.我们称d(a,b)为a,b两结点间的距离. 一点v到一条路径P的距离为该点与P上的最近的结点的距离: d(v,P)=min{d(v,u),u为路径P上的结

【CodeForces】343D Water tree (线段树好题!还未弄懂)

/* 此题的方法除了用线段树求子树,通过标记父亲,更新儿子的方法,来更新祖先,学习了. 对于建树的方法由于并没有说明父亲与儿子的顺序,所以需要通过两次添加. 并且pre变量可以获得父亲的位置,还未弄懂! */ #define _CRT_SECURE_NO_WARNINGS #include<cstring> #include<cstdio> #include<iostream> #include<algorithm> using namespace std;

分类信息之争又将持续 赶集网化险但还未为夷

赶集网获得老虎基金和凯雷投资2亿美元投资的消息一出,再次引爆整个互联网,分类信息市场再起波澜.新一轮融资之后,赶集网成功化险,之前捉襟见肘的资金问题得到妥善解决. 舆论唱空不管用?老虎凯雷豪赌赶集网 在赶集网宣布获得老虎基金和凯雷投资新一轮2亿美元融资之后,业界舆论砸开了锅,虽然仍有不少围观者对赶集网持悲观的态度,但更多的人是好奇为何被老虎凯雷会豪赌被唱空了半年之久的赶集网. 其实也不难理解,在腾讯投资58同城之后,分类信息市场彻底被激活,尤其是资本市场,在腾讯的带动下更加不会错过这次机会.腾讯