zoukankan      html  css  js  c++  java
  • codevs 1664 清凉冷水

    传送门

    1664 清凉冷水

     时间限制: 1 s
     空间限制: 128000 KB
     题目等级 : 黄金 Gold
     
    题目描述 Description

         闷热的夏天,威斯康辛州的奶制品地区提供冷水供奶牛饮用,以此来解渴。农夫约翰将冷水通过N (3 <= N <= 99999; N 为奇数)个冷水管道,分别编号序号1..N从泵的位置一直送到牛棚里。当水在管道中流动时,夏天的热能使它变热。贝茜想要找到最冷的水,这样她就能比任何其他奶牛更好地享受这难得的好天气。

        她已经绘制了一整套完整的分支管道,并注意到这个管道系统犹如一棵树,它的根在农场,从根开始每个分支都分离出两个管道。令人惊讶的是,所有管道都有一个长度,当然这所有的N根管道连接成1条路或者和其他的管道路线连接。

        给出所有管道连接的地图,计算每一个分支点到牛棚的距离。贝茜将通过这些信息来找到最清凉冷水。

        管道的端点,可以作为分支点也可以作为管道终点,它以管道的编号命名。地图上包含C (1<= C <= N)个分支器,每个分支器包含3个数据,管道端点E_i (1<= E_i <= N),管道端点连接的两个管道B1_i, B2_i (2<= B1_i <=N; 2<= B2_i <=N)。管道1连接到牛棚,每两个连接器之间的管道长度均为1。

    输入描述 Input Description

        * 第 1 行: 2个用空格隔开的整数 N , C

        * 第 2 至 C+1 行: 3个用空格隔开的整数,分别表示连接器的编号,以及连接的2个管道的编号E_i, B1_i, B2_i

    输出描述 Output Description

         * 共 N 行: 分别表示每个管道到牛棚的最短距离。

    样例输入 Sample Input

        5 2

        3 5 4

        1 2 3

    样例输出 Sample Output

        1

        2

        2

        3

        3

    数据范围及提示 Data Size & Hint

        +------+

        | Barn |

        +------+

        |  1

        *

        2 / 3

        *

           4 / 5

    分类标签 Tags 点此展开 

    【思路】
    看这个题题目挺小清新的就做做看好了QUQ.
    spfa
    构建一个结点0为牛棚 1A :)
    【code】
    #include<iostream>
    #include<cstdio>
    #include<queue>
    #include<cstring>
    using namespace std;
    #define inf 0x3f3f3f3f
    #define mn 100009
    struct Edge
    {
        int x,y,z,nxt;
        Edge(int x=0,int y=0,int z=0,int nxt=0):
            x(x),y(y),z(z),nxt(nxt){}
    }edge[mn*2];
    int head[mn],sumedge,dis[mn],inq[mn];
    int n,m,u,v1,v2,c;
    void add(int x,int y,int z)
    {
        edge[++sumedge]=Edge(x,y,z,head[x]);
        head[x]=sumedge;
    }
    void spfa()
    {
        queue <int>q;
        memset(dis,0x3f,sizeof(dis));
        dis[0]=0;inq[0]=1;q.push(0);
        while(!q.empty())
        {
            int now=q.front();q.pop();
            inq[now]=0;
            for(int i=head[now];i;i=edge[i].nxt)
            {
                int to=edge[i].y;
                if(dis[to]>dis[now]+edge[i].z)
                {
                    dis[to]=dis[now]+edge[i].z;
                    if(!inq[to])
                    {
                        inq[to]=1;
                        q.push(to); 
                    }
                }
            }
         } 
    }
    int main()
    {
        scanf("%d %d",&n,&c);
        for(int i=1;i<=c;i++)
        {
            scanf("%d%d%d",&u,&v1,&v2);
            add(u,v1,1);add(u,v2,1);
            add(v1,u,1);add(v2,u,1);
        }
        add(1,0,1);add(0,1,1);
        spfa();
        for(int i=1;i<=n;i++)
        printf("%d
    ",dis[i]);
        return 0;
    }
     
  • 相关阅读:
    BZOJ.3990.[SDOI2015]排序(DFS)
    BZOJ.1040.[ZJOI2008]骑士(树形DP)
    BZOJ.2246.[SDOI2011]迷宫探险(DP 记忆化搜索 概率)
    BZOJ.3209.花神的数论题(数位DP)
    UVA.1640.The Counting Problem / BZOJ.1833.[ZJOI2010]数字计数(数位DP)
    HDU.3652.B-number(数位DP)
    BZOJ.4514.[SDOI2016]数字配对(费用流SPFA 二分图)
    BZOJ.4832.[Lydsy1704月赛]抵制克苏恩(期望DP)
    BZOJ.1025.[SCOI2009]游戏(背包DP)
    BZOJ.3257.树的难题(树形DP)
  • 原文地址:https://www.cnblogs.com/zzyh/p/6949749.html
Copyright © 2011-2022 走看看