首页 > 其他分享 >L2-038 病毒溯源

L2-038 病毒溯源

时间:2024-05-25 14:32:23浏览次数:22  
标签:idx int res son 038 L2 root 节点 溯源

详解代码

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 10010,M=10010;

int n;
int h[N], e[M], ne[M], idx;//邻接表,h表示顶点,e表示当前边的终点,ne表示下一条边,idx当前边的编号
int son[N];//每个点的儿子是谁
bool st[N];//标记x是有父节点的,同时找哪个点是根节点

void add(int a, int b)  // 添加一条边a->b
{
    e[idx] = b, ne[idx] = h[a], h[a] = idx ++ ;
}

int dfs(int u)
{
    int res = 0;
    son[u] = -1;//这个点先不能往下走
    for (int i = h[u]; ~i; i = ne[i])//遍历u的所有子节点
    {
        int j = e[i];//j表示子节点的编号
        int d = dfs(j);//求一下从j往下走的最大长度是多少
        if (res < d) res = d, son[u] = j;//更新长度,u走到j这个点
        else if (res == d) son[u] = min(son[u], j);//如果长度相等,就更新成编号最小的
    }
    return res + 1;//加1是加上当前这个点
}

int main()
{
    memset(h, -1, sizeof h);//初始化邻接表的表头
    cin>>n;
    
    //读入每个点的所以儿子
    for (int i = 0; i < n; i ++ )
    {
        int cnt;
        cin>>cnt;
        while(cnt--)
        {
            int x;
            cin>>x;
            add(i,x);
            st[x]=true;
        }
    }
    //找哪个点是根节点
    int root=0;
    while(st[root])root++;//如果root有父节点,说明root不是根节点,就往后走
    
    printf("%d\n", dfs(root));//最大长度
    printf("%d", root);//从根节点往下走
    while (son[root] != -1)//当根节点能往下走的时候
    {
        root = son[root];
        printf(" %d", root);
    }

    return 0;
}


//给一棵树找到从根节点到叶节点的最长路径,并输出,如果长度相同,输出字典序小的
//从根开始往下递归递归

在这里插入图片描述

标签:idx,int,res,son,038,L2,root,节点,溯源
From: https://blog.csdn.net/2301_79203206/article/details/139196549

相关文章

  • 【Text2SQL 论文】SQLova:首次将 PLM 应用到 NL2SQL 中
    论文:AComprehensiveExplorationonWikiSQLwithTable-AwareWordContextualization⭐⭐⭐⭐KR2MLWorkshopatNeurIPS2019,arXiv:1902.01069Code:SQLova|GitHub参考文章:将预训练语言模型引入WikiSQL任务|CSDN一、论文速度这篇论文对SQLNet进行改进,首......
  • DockerDesktop安装指南以及Windows下WSL2和 Hyper-V相关问题追查
    文章原创不易,转载请注明来源,谢谢!一、 问题周末在家,给自己的老的台式机安装DockerDesktop。电脑配置是处理器Intel(R)Core(TM)[email protected]  3.30GHz    机带RAM16.0GB(15.9GB可用)    系统类型64位操作系统,基于x64的处理器   ......
  • LG10384
    一道相当不错的概率题。首先考虑种子中存在\(\verb!aa!\)的情况。显然,我们可以让每个不是\(\verb!aa!\)的种子都与这个\(\verb!aa!\)型的种子杂交,并检验杂交后的性状。若为\(\verb!a!\),则一定为\(\verb!Aa!\),否则可能是\(\verb!AA!\)或\(\verb!Aa!\)。不难想到多杂交......
  • 「Pygors跨平台GUI」2:安装MinGW-w64、MSYS2还是WSL2
    「Pygors系列」一句话导读:MinGW-w64只有编译器,MSYS2带着更新环境,WSL2实用性比较高 历史与渊源  Windows平台Linux平台二进制兼容WSL2:运行Linux程序Wine:运行Windows程序接口兼容CygWin:编译Linux程序Winelib:编译Windows程序编译器兼容MinGW-w64:编译Linux......
  • 华为L2TP
    需求:总部有公网地址搭建L2TP,分支无公网地址,跟总部建立OSPF连接客户端配置#sysnameclient#l2tpenable#interfaceVirtual-Template1pppchapuserhuaweipppchappasswordHuawei@1234ipaddressppp-negotiatel2tp-auto-clientenable#默认ospfp2mp-mas......
  • linux里安装sql2022详细步骤
    https://learn.microsoft.com/zh-tw/sql/linux/quickstart-install-connect-ubuntu?view=sql-server-linux-ver16&preserve-view=true&tabs=ubuntu2004https://learn.microsoft.com/zh-tw/sql/linux/quickstart-install-connect-ubuntu?view=sql-server-linux-ver16&a......
  • 设置WSL2,让局域网的其他电脑访问WSL2里面的内容
    要让局域网的其他设备访问WSL2内的内容,您需要进行以下步骤:确保WSL2正在运行。找出WSL2的IP地址。确保Windows防火墙允许访问WSL2的端口。在WSL2上设置端口转发或者将服务绑定到localhost。以下是具体步骤的示例:打开PowerShell并运行以下命令以查找WSL2......
  • wsl2自己写的第一个驱动模块
    参考资料:手把手教你使用VSCode进行linux内核代码阅读和开发-知乎(zhihu.com)2023年对比一下ccls和clangd|工欲善其事,必先利其器(martins3.github.io)Linux驱动实践:带你一步一步编译内核驱动程序-知乎(zhihu.com)vscodeextensions-Cannotuseclangd......
  • 27.企业微信-L2
    importrequestsclassTestWework:deftest_get_token(self):self.corp_id="ww0500b1708efeb406"self.corp_secret="5fas7s3wQzC6k5W11SqZ1dxMcXvC57yKXi_NMVXu4pkBNY"self.base_url="https://qyapi.weixi11n.qq.......
  • P10385 艺术与篮球 题解
    一道用编程解决的数学题。大概思路是:intmonth[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};这是普通年\(12\)个月的天数。然后还要考虑闰年,有\(2000,2004,2008,2012,2016,2020,2024\)。将这些闰年的二月二十九号手算出来能不能打篮球,最后加在结果上就行了。然后循环......