zoukankan      html  css  js  c++  java
  • xcoj1226-捕鼠

    题目链接

    题目描述

    GX养的一只仓鼠最近跑进了一个神秘的城堡里,他准备在这个有n个房间的城堡中抓捕他的仓鼠,他在房间0放了一块食物,根据抓鼠攻略,这块食物可以吸引距离它D的仓鼠,但是仓鼠还是没有出现,现在给你一张这个城堡的地图,上面标有各个房间的关系,已知每个房间都相连且距离为1,GX想知道他的仓鼠可能出现在哪些房间,请输出这些房间的总数

    输入

    第一行输入n(0< n <=100000)和D(0< D < n)
    接下来的n-1行为房间的连接关系,每行有两个数x,y代表房间x与房间y相邻

    输出

    对于每组数据,输出一个数,表示仓鼠可能出现的房间的数量

    样例输入

    10 2
    0 1
    0 2
    0 3
    1 4
    1 5
    2 6
    3 7
    4 8
    6 9

    样例输出

    2

    思路

    因为题中说明有n个房间和n-1条通道,故可以将它们看成一棵树,然后运用从房间0开始,运用深度优先搜索或者广度优先搜索进行遍历深度为D的房间,并统计数量。

    #include <iostream>
    #include <vector>
    #include <cstring>
    #include <queue>
    #include <fstream>
    using namespace std;
    
    int d;
    int count;
    vector<int> edges[100005];
    bool vis[100005];
    
    //深度优先遍历
    void dfs(int v, int step)
    {
        if(step == d)
        {
            return ;
        }
        else
        {
            vis[v] = true;
            count ++;
            for(int i = 0; i < edges[v].size(); ++ i)
            {
                if(!vis[edges[v][i]])
                {
                    dfs(edges[v][i], step + 1);           
                }
            }
        }
    }
    
    int main()
    {
        //ifstream cin("data.in");
        int n;
        while(cin >> n >> d)
        {
            count = 0;
            d ++;
            memset(vis, false, sizeof(bool) * n);
            for(int i = 0; i < n; i ++)
            {
                    edges[i].clear();//注意初始化,负责会出错
            }
            for(int i = 0; i < n-1; ++ i)
            {
                int x, y;
                cin >> x >> y;
                edges[x].push_back(y);
            }
            dfs(0, 0);
            cout << n - count << endl;//count为以遍历的房间,即距离房间0距离小于等于D的房间
        }
        return 0;
    }
  • 相关阅读:
    第 15 章 标签页和工具提示插件
    第 14 章 下拉菜单和滚动监听插件
    第 13 章 模态框插件
    第 12 章 列表组面板和嵌入组件
    第 11 章 进度条媒体对象和 Well 组件
    第 10 章 巨幕页头缩略图和警告框组件
    第 9 章 路径分页标签和徽章组件
    lock()与lockInterruptibly()的区别
    MySQL中Innodb的聚簇索引和非聚簇索引
    MySQL使用可重复读作为默认隔离级别的原因
  • 原文地址:https://www.cnblogs.com/topk/p/6580111.html
Copyright © 2011-2022 走看看