2021团体程序设计天梯赛 L2-2 病毒溯源

摘要:
想法:dfs+优化提示:得到答案后,您可以追溯到路径#include 使用namespacestd;组分maxn=10000+5;整数[maxn];boolisp[maxn];intcentg[maxn];intmaxceng=0;vector<int>vmaxn;intdfs{ifreturnceng[现在];如果{ceng[当前]=1;return1;}ceng[现在]=dfs+1;returnceng[现在];}intmain(){intn;cin˃˃n;forfate[i]=i;对于{intt;cin˃˃t;ifisp[i]=true;对于{intx;cin˃˃x;fate[x]=i;}}对于{if{ceng[i]=dfs;if{maxceng=ceng[i];vmaxn.clear();intnow=i;while(father[now]!

思路:

dfs+优化

Tip:

得到答案后回溯可得到路径

#include <bits/stdc++.h>

using namespace std;

const int maxn = 10000 + 5;
int father[maxn];
bool isp[maxn];
int ceng[maxn];
int maxceng = 0;
vector<int> vmaxn;

int dfs(int now) {
    if (ceng[now])
        return ceng[now];
    if (father[now] == now) {
        ceng[now] = 1;
        return 1;
    }
    ceng[now] = dfs(father[now]) + 1;
    return ceng[now];
}

int main() {
    int n;
    cin >> n;
    for (int i = 0; i < n; i++)
        father[i] = i;
    for (int i = 0; i < n; i++) {
        int t;
        cin >> t;
        if (t == 0)
            isp[i] = true;
        for (int j = 1; j <= t; j++) {
            int x;
            cin >> x;
            father[x] = i;
        }
    }
    for (int i = 0; i < n; i++) {
        if (isp[i]) {
            ceng[i] = dfs(i);
            if (ceng[i] > maxceng) {
                maxceng = ceng[i];
                vmaxn.clear();
                int now = i;
                while (father[now] != now) {
                    vmaxn.push_back(now);
                    now = father[now];
                }
                vmaxn.push_back(now);
            } else if (ceng[i] == maxceng) {
                vector<int> vnow;
                int now = i;
                while (father[now] != now) {
                    vnow.push_back(now);
                    now = father[now];
                }
                vnow.push_back(now);
                bool flag = false;
                for (int k = maxceng - 1; k >= 0; k--) {
                    if (vnow[k] < vmaxn[k]) {
                        flag = true;
                        break;
                    } else if (vnow[k] > vmaxn[k]) {
                        flag = false;
                        break;
                    }
                }
                if (flag)
                    vmaxn = vnow;
            }
        }
    }
    cout << maxceng << endl;
    bool first = true;
    for (int k = maxceng - 1; k >= 0; k--) {
        if (first) {
            first = false;
            cout << vmaxn[k];
        } else
            cout << " " << vmaxn[k];
    }
    return 0;
}

  

免责声明:文章转载自《2021团体程序设计天梯赛 L2-2 病毒溯源》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇PHP常见的数组遍历方式ISR吞吐性能问题下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

react 中echarts-for-react使用 自适应div

import*asReactfrom'react'importReactEchartsfrom'charts-for-ract'导出接口IProps{}接口IState{}classCapitalBudgetsextendsReact.Component<IProps,IState>{constructor(props:IProps){super(props...

hiveserver2启动卡住问题解决方案

问题分析:hiveserver2可能是Hadoop集群进入安全模式,导致hiveserver2连接不上集群临时解决方案:离开安全模式即可#查看安全模式情况hdfsdfsadmin-safemodeget#离开安全模式hdfsdfsadmin-safemodeleave#进入安全模式hdfsdfsadmin-safemodeenter问题再分析:如何永久性的解...

Json对象转Ts类

其次,Json是一种轻量级的数据交换格式。在前端和后端之间的数据交互过程中,后端接口返回Json格式的数据,前端需要使用相应的Ts类对象来接收它。此时,如果后端提供样本数据或现有接口返回的Json格式数据,是否有方法帮助我们从Json格式数据生成Ts类?介绍了三个主要功能。1.查看Json对应的Ts类,将要格式化的Json字符串复制粘贴到中间编辑区域。单击右...

Django如何安装指定版本

Django的最新版本默认安装为:pipinstalldjangoDjango,然后是版本号:pipinstalldjango==1.11.7如果使用pipinstall库的安装速度较慢,您可以使用豆瓣的图片:pipinstalldjango==1.11.7-ihttp://pypi.douban.com/simple--trusted-hostpypi.d...

jquery跨域请求数据

Jquery跨域请求数据Jquery跨请求数据。事实上,这很容易。请遵循以下步骤:首先,编写js,通过get获取远程数据。请注意,回调参数应添加在链接之后,这意味着将回调函数地址传输到远程页面。',{params},函数cb{alert;alert;},'json');第二:编写处理程序。publicvoidProcessRequest{context.Re...

利用油猴插件实现全网VIP视频免费看

利用油猴插件实现全网VIP视频免费看第一步:首先打开谷歌应用商店搜索tampermonkey安装这个插件第二步:在百度搜索框搜索油猴可以看到以下页面,点击进入。下载谷歌上网助手解压后,将后缀为crx的文件拖入即可。之后注册一个谷歌上网助手账后登录即可进入谷歌应用商店油猴插件...