• [dfs]洛谷 P2279 消防局的设立


    题目描述

    2020年,人类在火星上建立了一个庞大的基地群,总共有n个基地。起初为了节约材料,人类只修建了n-1条道路来连接这些基地,并且每两个基地都能够通过道路到达,所以所有的基地形成了一个巨大的树状结构。如果基地A到基地B至少要经过d条道路的话,我们称基地A到基地B的距离为d。

    由于火星上非常干燥,经常引发火灾,人类决定在火星上修建若干个消防局。消防局只能修建在基地里,每个消防局有能力扑灭与它距离不超过2的基地的火灾。

    你的任务是计算至少要修建多少个消防局才能够确保火星上所有的基地在发生火灾时,消防队有能力及时扑灭火灾。

    输入输出格式

    输入格式:
    输入文件名为input.txt。

    输入文件的第一行为n (n<=1000),表示火星上基地的数目。接下来的n-1行每行有一个正整数,其中文件第i行的正整数为a[i],表示从编号为i的基地到编号为a[i]的基地之间有一条道路,为了更加简洁的描述树状结构的基地群,有a[i]

    题解##

    其实这题O(n^2)就可以过了
    我们考虑一下怎么将问题转为O(n^2)
        我们可以考虑当前没有被管到的最深点i,如果取他的爷爷,那么可以管到更多的点
        那么我们每次就找到最深点i,在他爷爷处设立消防局
        再思考
        那怎么将建消防局后的点都打上标记
        然后我们就可以用一个dfs来实现
    最后模一模dalao用树状dp的做法(虽然这题就是放在dp分块里的)
    

    代码

    #include<cstdio>
    #include<memory.h>
    #include<iostream>
    using namespace std;
    #define MAXN 1000
    struct edge{int to,next;}e[1010];
    int head[1010],father[1010],tot,deep[1010],n,a,ans;
    bool vis[1010];
    void insert(int from,int to)
    {
        e[++tot].to=to;
        e[tot].next=head[from];
        head[from]=tot;
    }
    void dfs(int dep,int d)
    {
        vis[dep]=false;
        if (d==0) return;
        for(int i=head[dep];i!=0;i=e[i].next) dfs(e[i].to,d-1);
        dfs(father[dep],d-1);
    }
    int main()
    {
        scanf("%d",&n);
        father[1]=1;
        for(int i=2;i<=n;++i)
        {
            scanf("%d",&a);
            insert(a,i);
            father[i]=a;
        }
        for(int i=1;i<=n;++i) deep[i]=deep[father[i]]+1;
        memset(vis,true,sizeof(vis));
        while(true)
        {
            int t=0;
            for(int i=1;i<=n;++i) if (vis[i]&&deep[i]>deep[t]) t=i;
            if (t==0) break;
            dfs(father[father[t]],2);
            ans++;
        }
        printf("%d
    ",ans);
        return 0;
    }
  • 相关阅读:
    linux进程调度(zz)
    为什么vfork的子进程里用return,整个程序会挂掉,而且exit不会(zz)
    ubuntu安装samba
    【前端知乎系列】ArrayBuffer 和 Blob 对象
    【Web技术】442- 关于图片懒加载的几种方案
    【Web技术】441- 蚂蚁前端研发最佳实践
    【面试题】440- 10 道 Nodejs EventLoop 和事件相关面试题
    【面试题】439- 这是一道网红面试题
    【Web技术】438- 移动端体验优化经验总结与实践
    记 · 寒风依旧 · 虎跑路和人生路
  • 原文地址:https://www.cnblogs.com/Comfortable/p/8412235.html
Copyright © 2020-2023  润新知