• 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

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<queue>
     5 using namespace std;
     6 queue<int>que;
     7 int far[100009];
     8 int num=1;
     9 struct node{
    10     int u,v,next,w;
    11 }edge[100001];
    12 int head[100000],vis[100001],dis[100001];
    13 int headd=0,tail=1;
    14 
    15 /*struct que
    16 {
    17     int sz[10001];
    18     int front()
    19     {
    20         return sz[headd];
    21     } 
    22     void push(int x)
    23     {
    24         sz[++tail]=x;
    25     }
    26     void pop()
    27     {
    28         headd++;
    29     }
    30      int size()
    31     {
    32        return tail-headd;
    33     }
    34     void cl()
    35     {
    36         headd=0;
    37         tail=1;
    38     }
    39 }queue;*/
    40 void add_edge(int x,int y)
    41 {
    42     edge[num].u=x;
    43     edge[num].v=y;
    44     edge[num].w=1;
    45     edge[num].next=head[x];
    46     head[x]=num++;
    47 }
    48 void spfa()
    49 {
    50     que.push(1);
    51     vis[1]=1;
    52     dis[1]=0;
    53     int now;
    54     while(que.size()!=0)
    55     {
    56         now=que.front();
    57         que.pop();
    58         for(int i=head[now];i!=-1;i=edge[i].next)
    59         {
    60             int p=edge[i].v;
    61             if(dis[p]>dis[now]+1)
    62             {
    63                 dis[p]=dis[now]+1;
    64             }
    65             if(vis[p]==0)
    66             {
    67                 vis[p]=1;
    68                 que.push(p);
    69             }
    70         }
    71         
    72     }
    73 }
    74 int main()
    75 {
    76     int n,m,a,b,c;
    77     memset(dis,0x7f,sizeof(dis));
    78     scanf("%d%d",&n,&m);
    79     for(int i=1;i<=n;i++)head[i]=-1;
    80     for(int i=1;i<=m;i++)
    81     {
    82         scanf("%d%d%d",&a,&b,&c);
    83         add_edge(a,b);
    84         add_edge(a,c);
    85     }
    86     spfa();
    87     for(int i=1;i<=n;i++)
    88     cout<<dis[i]+1<<endl;
    89 }
  • 相关阅读:
    Pycharm激活
    初识HTML
    软件测试之性能测试应用领域
    剑指offer学习
    编译PC版本的C程序
    嵌入式Linux中Socket套接口开发
    win7安装ubuntu,如何设置win7为默认启动项
    struct v4l2_buffer
    dpkg命令查看 sudo apt-get install ~~ 安装的软件路径
    Missing table when do SQL data compare
  • 原文地址:https://www.cnblogs.com/sssy/p/6734952.html
Copyright © 2020-2023  润新知