codevs 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

 

图的遍历问题

死水。。

屠龙宝刀点击就送

#include <cstdio>
#include <vector>
using namespace std;
vector<int>Graph[100010];
int N,C,dep[100010];
void dfs(int pos,int deep)
{
    if(dep[pos]) return;
    dep[pos]=deep;
    for(int i=0;i<Graph[pos].size();i++)
        dfs(Graph[pos][i],deep+1);
}
int main()
{
    scanf("%d%d",&N,&C);
    for(int x,y,z;C--;)
    {
        scanf("%d%d%d",&x,&y,&z);
        Graph[x].push_back(y);
        Graph[x].push_back(z);
    }
    dfs(1,1);
    for(int i=1;i<=N;i++) printf("%d\n",dep[i]);
    return 0;
}

 

posted @ 2017-04-25 21:09  杀猪状元  阅读(133)  评论(0编辑  收藏  举报