博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Best Coder Round#25 1003 树的非递归访问
阅读量:5117 次
发布时间:2019-06-13

本文共 1882 字,大约阅读时间需要 6 分钟。

虽然官方解释是这题目里的树看作无向无环图,从答案来看还是在“以1作为根节点”这一前提下进行的,这棵树搭建好以后,从叶节点开始访问,一直推到根节点即可——很像动态规划的“自底向上”。

但这棵树的搭建堪忧:给出的边不知道哪边更接近根节点。所以我给出的方案干脆在两个顶点都将对方加成孩子,等到访问的时候再作处理,根据从1这个根节点开始访问这个特性,额外加一个“isVisited"来做区分。

然后利用栈对树进行非递归访问

/** * For best-coder problem 3 */#include 
using namespace std;#include
#include
struct Node{public: Node() :mIsVisited(false) {} bool mIsVisited; set< int > mChilds; set< int > mColorSet;};int main(){ int nNode, nCounting; while( cin >> nNode >> nCounting ) { Node node[50001]; for( int i=1; i
> a >> b; node[a].mChilds.insert(b); node[b].mChilds.insert(a); } for( int i=0; i
> n >> color; node[n].mColorSet.insert(color); } stack
nodeStack; node[1].mIsVisited = true; nodeStack.push(1); do{ int currentTop = nodeStack.top(); Node& topNode = node[currentTop]; set
& topChilds = topNode.mChilds; set
& topColors = topNode.mColorSet; for( set
::iterator ci = topChilds.begin(); ci != topChilds.end(); ci++ ) { int child = *ci; if( node[child].mIsVisited ) { topChilds.erase(child); continue; } node[child].mIsVisited = true; nodeStack.push(child); break; } // it's a leaf child if( topChilds.empty() ) { nodeStack.pop(); if( nodeStack.empty() ) continue; Node& topNode = node[ nodeStack.top() ]; topNode.mColorSet.insert(topColors.begin(),topColors.end()); topNode.mChilds.erase(currentTop); continue; } }while(!nodeStack.empty()); // output for( int i=1; i<=nNode; i++ ) { cout << node[i].mColorSet.size(); if( i != nNode ) { cout << " "; }else{ cout << endl; } } }}

  

转载于:https://www.cnblogs.com/medivh-tang/p/4200083.html

你可能感兴趣的文章
一道不知道哪里来的容斥题
查看>>
Blender Python UV 学习
查看>>
window添加右键菜单
查看>>
入手腾龙SP AF90mm MACRO
查看>>
Window7上搭建symfony开发环境(PEAR)
查看>>
Linux内核态、用户态简介与IntelCPU特权级别--Ring0-3
查看>>
第23月第24天 git命令 .git-credentials git rm --cached git stash clear
查看>>
java SE :标准输入/输出
查看>>
一些方便系统诊断的bash函数
查看>>
jquery中ajax返回值无法传递到上层函数
查看>>
css3之transform-origin
查看>>
Master选举原理
查看>>
[ JAVA编程 ] double类型计算精度丢失问题及解决方法
查看>>
小别离
查看>>
微信小程序-发起 HTTPS 请求
查看>>
WPF动画设置1(转)
查看>>
MySQL的并行复制多线程复制MTS(Multi-Threaded Slaves)
查看>>
好玩的-记最近玩的几个经典ipad ios游戏
查看>>
PyQt5--EventSender
查看>>
Sql Server 中由数字转换为指定长度的字符串
查看>>