题373.拓扑排序-acwing-Q1191--家谱树

news/2024/7/15 11:47:48 标签: 算法, 图论, c++

文章目录

  • 题373.拓扑排序-acwing-Q1191--家谱树
  • 一、题目
  • 二、题解
  • 三、关于拓扑排序


题373.拓扑排序-acwing-Q1191–家谱树


一、题目

在这里插入图片描述
在这里插入图片描述

二、题解

题目要求输出一个序列使得每个人的孩子比那个人后列出,其实就是输出一个拓扑序。则直接套拓扑排序板子即可。
本题代码如下:

#include <bits/stdc++.h>

using namespace std;

const int maxn=110,maxm=1e4+1;

int n;
int h[maxn],e[maxm],ne[maxm],idx;
int d[maxn];

void add(int a,int b)
{
    e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}

void topSort()
{
    queue<int> q;
    for(int i=1;i<=n;i++)//将所有度为0的节点先入队
    {
        if(!d[i])
        {
            q.push(i);
        }
    }
    while(!q.empty())
    {
        int t=q.front();
        q.pop();
        cout<<t<<" ";
        for(int i=h[t];i!=-1;i=ne[i])
        {
            int j=e[i];
            if(--d[j]==0)//将输出的节点的邻接点的度数-1,看度数是否为0,如果为0则入队
            {
                q.push(j);
            }
        }
    }
}

int main()
{
    cin>>n;
    memset(h,-1,sizeof h);
    for(int i=1;i<=n;i++)
    {
        int b;
        while(cin>>b,b)
        {
            add(i,b);
            d[b]++;//统计节点度数
        }
    }
    topSort();
}

三、关于拓扑排序

如何输出字典序最小的拓扑序列?
将队列换成优先队列,优先队列取出的元素是当前字典序最小的编号,在出队的时候记录出队的编号即为当前字典序最小的拓扑序,此方法的时间复杂度是O(logn∗(n+m))



http://www.niftyadmin.cn/n/1061644.html

相关文章

伪类选择器的使用

迄今为止&#xff0c;我们学到的选择器都是基于文档树中的元素。但有时候&#xff0c;我们需要格式化一些没有css选择器可用的东西&#xff0c;例如超链接的状态&#xff08;活动状态或已被访问过的状态。&#xff09; 伪类选择器允许我们格式化不在文档树种一些条目。不同浏览…

【剑指offer】二叉搜索树的后序遍历序列

转载请注明出处&#xff1a;http://blog.csdn.net/ns_code/article/details/26092725剑指offer上的第24题&#xff0c;主要考察递归思想&#xff0c;九度OJ上AC。题目描写叙述&#xff1a;输入一个整数数组&#xff0c;推断该数组是不是某二叉搜索树的后序遍历的结果。假设是则…

7丶测试与调试

测试概要 测试内容 实际测试内容 预先设计内容 说明 登录系统 不同用户输入用户名和密码后&#xff0c;进入各自的界面 普通用户登录后进入查询界面&#xff0c;管理员登录后进入管理界面 线路查询 用户输入线路名后&#xff0c;点击查询&#xff0c;结果框出现该线…

题380.ABC260-D - Draw Your Cards

文章目录题380.ABC260-D - Draw Your Cards一、题目二、题解题380.ABC260-D - Draw Your Cards 一、题目 二、题解 本题题意为每次递出一张写着X号的牌&#xff0c;将这张牌放到桌上&#xff0c;如果桌上有某叠牌处在最上面的牌上写的号比X来的大&#xff0c;则将递来的牌盖在那…

用java编写中国象棋_如何用Java实现网络中国象棋室(一)

一起学习Java语言的简洁和完美&#xff0c;以及java网络功能的优越性是每个java体验者所体会的感受。笔者在闲暇之余&#xff0c;开发出网络中国象棋(以下简称象棋)程序&#xff0c;在此愿与广大java编程爱好者共享&#xff0c;做以介绍供大家参考。如有问题可与我联系&#xf…

mark blog

C Windows 各种计时函数总结 C中四种强制类型转换的区别 内存对齐的规则以及作用 STL 《C标准程序库》读后感 STL系列总结 数据结构 数据结构基础知识整理&#xff08;目录&#xff09;_浙大MOOK 二叉树先序、中序、后序遍历的非递归实现 链表相关的算法题…

Hadoop第二课:Hadoop集群环境配置

一、Yum配置 1.检查Yum是否安装 rpm -qa|grep yum 2.修改yum源&#xff0c;我使用的是163的镜像源&#xff08;http://mirrors.163.com/&#xff09;&#xff0c;根据自己的系统选择源&#xff0c; #进入目录 cd /etc/yum.repos.d/ #列表 ls -al 3.备份CentOS-Base.repo为CentO…

TFS强制签入方法

项目组成员中&#xff0c;经常由于离职后忘记将签出的文件签入&#xff0c;导致其它人无法签出修改。可采用如下方式进行强制撤销签出 1、连接TFS数据库&#xff0c;数据库地址查看方式&#xff1a;打开TFS管理控制台 -> 应用层 -> 在右边可看到“数据层摘要”。 2、确认…