• 洛谷1967货车运输 即 NOIP2013 DAY1 T3


    题目描述

    A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路。每一条道路对车辆都有重量限制,简称限重。现在有 q 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情况下,最多能运多重的货物。

    输入输出格式

    输入格式:
    输入文件名为 truck.in。

    输入文件第一行有两个用一个空格隔开的整数 n,m,表示 A 国有 n 座城市和 m 条道

    路。 接下来 m 行每行 3 个整数 x、 y、 z,每两个整数之间用一个空格隔开,表示从 x 号城市到 y 号城市有一条限重为 z 的道路。意:x 不等于 y,两座城市之间可能有多条道路。

    接下来一行有一个整数 q,表示有 q 辆货车需要运货。

    接下来 q 行,每行两个整数 x、y,之间用一个空格隔开,表示一辆货车需要从 x 城市运输货物到 y 城市,注意:x 不等于 y。

    输出格式:
    输出文件名为 truck.out。

    输出共有 q 行,每行一个整数,表示对于每一辆货车,它的最大载重是多少。如果货

    车不能到达目的地,输出-1。

    输入输出样例

    输入样例#1:
    4 3
    1 2 4
    2 3 3
    3 1 1
    3
    1 3
    1 4
    1 3
    输出样例#1:
    3
    -1
    3
    说明

    对于 30%的数据,0 < n < 1,000,0 < m < 10,000,0 < q< 1,000; 对于 60%的数据,0 < n < 1,000,0 < m < 50,000,0 < q< 1,000; 对于 100%的数据,0 < n < 10,000,0 < m < 50,000,0 < q< 30,000,0 ≤ z ≤ 100,000。


    水题. 最大生成树 + 树上倍增
    打了一个晚上(我真的是好弱…)

    #include<iostream>
    #include<algorithm>
    #include<math.h>
    #include<string.h>
    #include<limits.h>
    using namespace std;
    const int maxN = (int)1e4;
    const int maxM = (int)5e4;
    struct edge
    {
        int u, v, w, next;
    }G[maxM + (maxN << 1)];
    int operator <(edge x, edge y)
    {
        return x.w > y.w;
    }
    int anc[maxN + 1];
    void getAnc(int u)
    {
        if(anc[u] == u)
            return;
        getAnc(anc[u]);
        anc[u] = anc[anc[u]];
    }
    int top;
    int head[maxN + 1];
    void addEdge(int u, int v, int w)
    {
        G[top].v = v;
        G[top].w = w;
        G[top].next = head[u];
        head[u] = top ++;
    }
    int ST[maxN + 1][17][2];
    int dep[maxN + 1];
    void DFS(int u, int fa, int w)
    {
        dep[u] = dep[fa] + 1;
        ST[u][0][0] = fa;
        ST[u][0][1] = w;
        for(int i = 1; (1 << i) <= dep[u]; i ++)
            ST[u][i][0] = ST[ST[u][i - 1][0]][i - 1][0], 
            ST[u][i][1] = min(ST[u][i - 1][1], ST[ST[u][i - 1][0]][i - 1][1]);
        for(int i = head[u]; i != - 1; i = G[i].next)
            if(G[i].v != fa)
                DFS(G[i].v, u, G[i].w);
    }
    int LCA(int u, int v)
    {
        if(dep[v] > dep[u])
            swap(u, v);
        int ret = INT_MAX;
        for(int i = 17; i >= 0; i --)
            if(dep[u] - (1 << i) >= dep[v])
                ret = min(ret, ST[u][i][1]), u = ST[u][i][0];
        if(u == v)
            return ret;
        for(int i = 17; i >= 0; i --)
            if((1 << i) <= dep[u] && ST[u][i][0] != ST[v][i][0])
                ret = min(ret, ST[u][i][1]), u = ST[u][i][0], ret = min(ret, ST[v][i][1]), v = ST[v][i][0];
        ret = min(ret, ST[u][0][1]);
        ret = min(ret, ST[v][0][1]);
        return ret;
    }
    int main()
    {
        ios::sync_with_stdio(false);
        int n, m;
        cin >> n >> m;
        for(int i = 0; i < m; i ++)
            cin >> G[i].u >> G[i].v >> G[i].w;
        sort(G, G + m);
        memset(head, - 1, sizeof(head));
        top = m;
        for(int i = 1; i <= n; i ++)
            anc[i] = i;
        for(int i = 0; i < m; i ++)
        {
            int u = G[i].u, v = G[i].v;
            getAnc(u);
            getAnc(v);
            if(anc[u] == anc[v])
                continue;
            anc[anc[v]] = anc[u];
            addEdge(u, v, G[i].w);
            addEdge(v, u, G[i].w);
        }
        memset(dep, - 1, sizeof(dep));
        for(int i = 1; i <= n; i ++)
            if(dep[i] == - 1) 
                DFS(i, i, INT_MAX);
        int Q;
        cin >> Q;
        for(int i = 0; i < Q; i ++)
        {
            int u, v;
            cin >> u >> v;
            getAnc(u);
            getAnc(v);
            if(anc[u] != anc[v])
                cout << - 1 << endl;
            else
                cout << LCA(u, v) << endl;
        }
    }
  • 相关阅读:
    406, "PRECONDITION_FAILED
    windows10x64环境安装RabbitMQ
    jquery插件formValidator的ajaxValidator传参数问题
    “~/Views/Home/Text.aspx”处的视图必须派生自 ViewPage、ViewPage<TModel>、ViewUserControl 或 ViewUserControl<TModel>。
    无法安装程序包“MIcrosoft.Owin.Security 2.0.2”。您正在尝试将此程序包安装到某个将“.NETFramework,Version=v4.0”作为目标的项目中。
    MSSQL优化之——查看语句执行情况
    C# 测试代码运行时间
    转换 Html 内容为纯文本内容(html,文本互转)
    腾讯微博OAuth2.0 .NET4.0 SDK 发布以及网站腾讯微博登陆示例代码(原创)
    QQ互联OAuth2.0 .NET SDK 发布以及网站QQ登陆示例代码(转)
  • 原文地址:https://www.cnblogs.com/ZeonfaiHo/p/6402865.html
Copyright © 2020-2023  润新知