标签:stream leaves using str return 层序遍历 algo leave math
基本思想:
层序遍历问题;
关键点:
无;
#include<iostream>
#include<stdlib.h>
#include<stdio.h>
#include<vector>
#include<string>
#include<math.h>
#include<algorithm>
#include<cstring>
#include<map>
#include<queue>
using namespace std;
int n, m;
struct node {
vector<int>child;
};
vector<node>tree;
vector<int>seq;
/*
void layer_init() {
if (tree.size() == 0)
return;
tree[0].layer = 0;
queue<int>q;
q.push(0);
while (!q.empty()){
int index = q.front();
q.pop();
for (int i = 0; i < tree[index].child.size(); i++) {
tree[tree[index].child[i]].layer = tree[index].layer + 1;
q.push(tree[index].child[i]);
}
}
}
*/
void layer_find() {
if (tree.size() == 0) {
cout << 0 << endl;
return;
}
queue<int>q;
q.push(1);
while (!q.empty()){
int size = q.size();
int cnt = 0;
for (int i = 0; i < size; i++) {
int index = q.front();
q.pop();
if (tree[index].child.size() == 0)
cnt++;
else {
for (int j = 0; j < tree[index].child.size(); j++) {
q.push(tree[index].child[j]);
}
}
}
seq.push_back(cnt);
}
}
int main() {
cin >> n >> m;
tree.resize(n+1);
int a, b,c;
for (int i = 0; i < m; i++) {
cin >> a >> b;
for (int j = 0; j < b; j++) {
cin >> c;
tree[a].child.push_back(c);
}
}
layer_find();
for (int i = 0; i < seq.size(); i++) {
if (i == 0)
cout << seq[i];
else
cout << " " << seq[i];
}
return 0;
}
1004 Counting Leaves (30point(s)) Easy only once
标签:stream leaves using str return 层序遍历 algo leave math
原文地址:https://www.cnblogs.com/songlinxuan/p/12307695.html