这题本身是个水题,但是写了半天
题意就是给出一个树的生成方式,让你还原这棵树,然后按深度输出结点
这个还原过程还是比较有趣的(没有用递归)
PS:getline的新姿势get
#include#include #include #include using namespace std;const int maxn = 1e6;int deep[maxn], c[maxn], f[maxn];string str[maxn];string tmp;vector G[maxn];queue Q;int main(){ int fa = 0, tot = 0, d = 0; while(getline(cin, str[++tot], ',')) { getline(cin, tmp, ','); for(int i = 0; i < tmp.length(); i++) c[tot] = c[tot]*10 + tmp[i] - '0'; f[tot] = fa; c[fa]--; deep[tot] = deep[fa] + 1; if(c[tot] != 0) { fa = tot; } while(c[fa] == 0) fa = f[fa]; } tot--; for(int i = 1; i <= tot; i++) d = max(d, deep[i]); for(int i = 1; i <= tot; i++) G[f[i]].push_back(i); cout< <