本题给定一个庞大家族的家谱,要请你给出最小一辈的名单。

输入格式:

输入在第一行给出家族人口总数 N(不超过 100 000 的正整数) —— 简单起见,我们把家族成员从 1 到 N 编号。随后第二行给出 N 个编号,其中第 i 个编号对应第 i 位成员的父/母。家谱中辈分最高的老祖宗对应的父/母编号为 -1。一行中的数字间以空格分隔。

输出格式:

首先输出最小的辈分(老祖宗的辈分为 1,以下逐级递增)。然后在第二行按递增顺序输出辈分最小的成员的编号。编号间以一个空格分隔,行首尾不得有多余空格。

输入样例:

9
2 6 5 5 -1 5 6 4 7

输出样例:

4
1 9

终于AC了,一波三折啊。

比赛的时候用 队列+set 水到15分,回来自己按照比赛的思路敲了下16分。下面是代码:

//Asimple
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll maxn = + ;
int n, m, res, ans, len, T, k, num, sum, t, cnt;
bool vis[maxn];
struct node{
int fa;
};
node a[maxn]; void input() {
ios_base::sync_with_stdio(false);
cin >> n;
queue<int> q;
for(int i=; i<=n; i++) {
cin >> num;
a[i].fa = num;
if( num == - ) {
q.push(i);
vis[i] = true;
} else vis[i] = false;
}
set<int> S;
int cas = ;
while( !q.empty() ) {
S.clear();
while( !q.empty() ) {
S.insert(q.front());
q.pop();
}
cas ++;
for(int i=; i<=n; i++) if( !vis[i] ) {
if( S.count(a[i].fa) == ) {
q.push(i);
}
}
}
cout << cas << endl;
bool f = true;
set<int>::iterator it;
for(it=S.begin(); it!=S.end(); it++) {
if( f ) f = false;
else cout << " ";
cout << *it;
}
cout << endl;
} int main(){
input();
return ;
}

emmmm,然后想了下是不是set的原因时间超限,然后直接用vector保存各个辈分的人。然后15分。。。╮(╯▽╰)╭  代码:

//Asimple
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll maxn = + ;
int n, m, res, ans, len, T, k, num, sum, t, cnt;
struct node{
int fa;
};
node a[maxn];
vector<int> re[maxn]; void input() {
ios_base::sync_with_stdio(false);
cin >> n;
queue<int> q;
len = ;
for(int i=; i<=n; i++) {
cin >> num;
a[i].fa = num;
if( num == - ) {
q.push(i);
re[len].push_back(i);
}
} while( !q.empty() ) {
len ++;
int T = q.size();
while( T -- ) {
int now = q.front(); q.pop();
for(int i=; i<=n; i++) {
if( a[i].fa == now ) {
q.push(i);
re[len].push_back(i);
}
}
} }
cout << len << endl;
for(int i=; i<re[len-].size(); i++) {
if( i!= ) cout << " ";
cout << re[len-][i];
}
cout << endl;
} int main(){
input();
return ;
}

仔细看了下代码,发现自己的BFS每次都要从1循环到n,emmmm,好像挺浪费时间的,不如把关系也用vector存吧,至少每次不用循环那么多次。一交20分。

好像去年有道题目也是被vector坑了,今天还是没有想到vector。真的傻啊。

20分代码:

//Asimple
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll maxn = + ;
int n, m, res, ans, len, T, k, num, sum, t, cnt;
vector<int> a[maxn];
vector<int> re[maxn]; void input() {
ios_base::sync_with_stdio(false);
cin >> n;
queue<int> q;
len = ;
for(int i=; i<=n; i++) {
cin >> num;
a[num].push_back(i);
if( num == - ) {
q.push(i);
re[len].push_back(i);
}
} while( !q.empty() ) {
len ++;
int T = q.size();
while( T -- ) {
int now = q.front(); q.pop();
for(int i=; i<a[now].size(); i++) {
q.push(a[now][i]);
re[len].push_back(a[now][i]);
}
}
} cout << len << endl;
for(int i=; i<re[len-].size(); i++) {
if( i != ) cout << " ";
cout << re[len-][i];
}
cout << endl;
} int main(){
input();
return ;
}

L2-026. 小字辈的更多相关文章

  1. 配置 L2 Population - 每天5分钟玩转 OpenStack(114)

    前面我们学习了L2 Population 的原理,今天讨论如何在 Neutron 中配置和启用此特性. 目前 L2 Population 支持 VXLAN with Linux bridge 和 VX ...

  2. L2 Population 原理 - 每天5分钟玩转 OpenStack(113)

    前面我们学习了 VXLAN,今天讨论跟 VXLAN 紧密相关的 L2 Population. L2 Population 是用来提高 VXLAN 网络 Scalability 的. 通常我们说某个系统 ...

  3. Neutron 理解 (4): Neutron OVS OpenFlow 流表 和 L2 Population [Netruon OVS OpenFlow tables + L2 Population]

    学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)Neutron OpenvSwitch + GR ...

  4. paper 126:[转载] 机器学习中的范数规则化之(一)L0、L1与L2范数

    机器学习中的范数规则化之(一)L0.L1与L2范数 zouxy09@qq.com http://blog.csdn.net/zouxy09 今天我们聊聊机器学习中出现的非常频繁的问题:过拟合与规则化. ...

  5. 正则化方法:L1和L2 regularization、数据集扩增、dropout

    正则化方法:防止过拟合,提高泛化能力 在训练数据不够多时,或者overtraining时,常常会导致overfitting(过拟合).其直观的表现如下图所示,随着训练过程的进行,模型复杂度增加,在tr ...

  6. 机器学习中的范数规则化之(一)L0、L1与L2范数

    L1正则会产生稀疏解,让很多无用的特征的系数变为0,只留下一些有用的特征 L2正则不让某些特征的系数变为0,即不产生稀疏解,只让他们接近于0.即L2正则倾向于让权重w变小.见第二篇的推导. 所以,样本 ...

  7. Openstack Neutron L2 Population

    Why do we need it, whatever it is? VM unicast, multicast and broadcast traffic flow is detailed in m ...

  8. 机器学习中的范数规则化之(一)L0、L1与L2范数(转)

    http://blog.csdn.net/zouxy09/article/details/24971995 机器学习中的范数规则化之(一)L0.L1与L2范数 zouxy09@qq.com http: ...

  9. L0/L1/L2范数的联系与区别

    L0/L1/L2范数的联系与区别 标签(空格分隔): 机器学习 最近快被各大公司的笔试题淹没了,其中有一道题是从贝叶斯先验,优化等各个方面比较L0.L1.L2范数的联系与区别. L0范数 L0范数表示 ...

  10. php大力力 [026节] php开发状态要随时做好整理工作

    php大力力 [026节]  php开发状态要随时做好整理工作: 1.整理了开发目录,以及文件命名: 2.做了各个页面的快捷方式: 3.把浏览器safari的很多没来得及消化的页面链接,写入了我的在线 ...

随机推荐

  1. 【Python】博客信息爬取-微信消息自动发送

    1.环境安装 python -m pip install --upgrade pip pip install bs4 pip install wxpy pip install lxml 2.博客爬取及 ...

  2. sqlserver等软件下载

    http://msdn.itellyou.cn/ 找到所需要的,复制下载路径,到迅雷下载

  3. Linux i2c子系统(二) _通过i2c-dev.c访问设备的方法

    另外一种驱动 应用层除了使用上述的使用i2c_driver接口来访问i2c设备,Linux内核还提供了一种简单粗暴的方式--直接通过虚拟i2c设备驱动的方式,即上一篇中的i2c-dev提供的方式,这种 ...

  4. C# 网络爬虫利器之Html Agility Pack如何快速实现解析Html

    简介 现在越来越多的场景需要我们使用网络爬虫,抓取相关数据便于我们使用,今天我们要讲的主角Html Agility Pack是在爬取的过程当中,能够高效的解析我们抓取到的html数据. 优势 在.NE ...

  5. Keil不能跳转到函数的定义怎么办

    有时候我们右键一个函数名并点击Go To Definition Of xxx时,Keil却提示无法找到定义.但这个函数确实有定义的.这个时候可以试着重新编译整个工程,即可跳转到定义了.

  6. 6.1 Pandora 实操 - 数据收集

    添加机器 添加机器命令,在 linux 机器上执行此命令 添加成功 添加收集器 采集机器数据 解析数据 转换数据 发送数据 接着,下一步即,成功创建收集任务. 分发机器 确认收集人物,绑定到机器上. ...

  7. 13、cookie

    一.cookie: 1.cookie cookie的应用: 1.用户名密码 自动登录 2.购物车商品的保存. <1>缓存信息,只存储特定的重要的信息.程序编程完成.缓存信息cookie技术 ...

  8. 最新版的Chrome不能设置网页编码怎么解?

    添加一个Google插件https://chrome.google.com/webstore/detail/set-character-encoding/bpojelgakakmcfmjfilgdlm ...

  9. Java开发岗位面试题归类

    一.Java基础 1. String类为什么是final的. ( 1.由于String类不能被继承,所以就不会被修改,这就避免了因为继承引起的安全隐患: 2.String类在程序中出现的频率比较高,如 ...

  10. javascript的数组之from()

    Array.from()方法从一个类似数组或可迭代对象中创建一个新的数组实例. const arr = [1, 2, 3]; Array.from(arr); //[1, 2, 3] Array.fr ...