POJ 2003 Hire and Fire (Tree)
题目:Hire and Fire
题目翻译成数据结构就是:建树,加结点,删除结点,打印结点。只有删除结点稍微复杂点,因为删除设计掉树的调整。
首先要考虑树怎么存储才能使解题更顺手。
1.我们要存储每个结点的孩子,父亲和名字。存储孩子是因为第一个孩子可能会“升级”,存储父亲是因为要打印,名字肯定也是要打印的;
2.我们要知道每个结点的子树,删除结点会涉及调整;
3.我们要知道根节点,存放CEO。
所以我们的结点出来了,如下:
struct Tman
{
string name;
Tman *father;
list<Tman *> sons;
};
思路都在注释里。
代码如下:
#include<iostream>
#include<map>
#include<list>
#include<string>
using namespace std; //存储名字,父亲,孩子就行
struct Tman
{
string name;
Tman *father;
list<Tman *> sons;
};
//key是结点名字,value是名字的子树
map<string, Tman *> hash; //根结点,指向CEO,打印是要用
Tman *root; void print(long dep, Tman *now)
{
if(now == NULL) return;
for(long i = ; i <= dep; ++i)
cout<<"+";
cout<<now->name<<endl;;
//递归打印每个孩子结点
for(list<Tman *>::iterator j = now->sons.begin(); j != now->sons.end(); ++j)
print(dep + , *j);
} void hires(string n1, string n2)
{
Tman *boss = hash[n1];//父亲的子树指针
Tman *employee = new Tman();//新建一个Tman结构体,用于存储新加入的结点
employee->name = n2;//新加入结点的名字
employee->father = boss;//n1是n2的父亲
boss->sons.push_back(employee);//把n2放入n1的孩子list中
hash[n2] = employee;//新加入的结点也要有子树
} void fire(string n1)
{
Tman *p = hash[n1];//指向n1结点的指针
hash.erase(n1);
while(p->sons.size() > )//如果要删的结点有孩子
{
p->name = p->sons.front()->name;//第一个孩子取代父亲的地位
hash[p->name] = p;//父亲的子树交给第一个孩子
p = p->sons.front();//p往下移动,始终指向孩子队列的第一个
}
p->father->sons.remove(p);//最后一个没有孩子的结点“删除”,实际上是上移了
delete p;//防止野指针
} void solve()
{
string str1,str2;
long i;
cin>>str1;
root = new Tman();
hash[str1] = root;
root->name = str1;
while(cin>>str1)
{
if(str1 == "print")
{
print(,root);
cout<<"------------------------------------------------------------"<<endl;
}
else if(str1 == "fire")
{
cin>>str2;
fire(str2);
}
else
{
cin>>str2;
cin>>str2;
hires(str1, str2);
}
}
} int main()
{
solve();
return ;
}
POJ 2003 Hire and Fire (Tree)的更多相关文章
- POJ 2003 Hire and Fire (多重链表 树结构 好题)
Hire and Fire Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 2316 Accepted: 655 Desc ...
- HDU 1325,POJ 1308 Is It A Tree
HDU认为1>2,3>2不是树,POJ认为是,而Virtual Judge上引用的是POJ数据这就是唯一的区别....(因为这个瞎折腾了半天) 此题因为是为了熟悉并查集而刷,其实想了下其实 ...
- hdu 1325 && poj 1308 Is It A Tree?(并查集)
Description A tree is a well-known data structure that is either empty (null, void, nothing) or is a ...
- POJ 1308 Is It A Tree?和HDU 1272 小希的迷宫
POJ题目网址:http://poj.org/problem?id=1308 HDU题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=1272 并查集的运用 ...
- POJ 1308 Is It A Tree?
Is It A Tree? Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 18778 Accepted: 6395 De ...
- HDU ACM 1325 / POJ 1308 Is It A Tree?
Is It A Tree? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- POJ 1308 Is It A Tree? (并查集)
Is It A Tree? Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 24237 Accepted: 8311 De ...
- POJ 1308 Is It A Tree? (并查集)
Is It A Tree? 题目链接: http://acm.hust.edu.cn/vjudge/contest/123393#problem/M Description A tree is a w ...
- POJ 1308 Is It A Tree?--题解报告
Is It A Tree? Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 31092 Accepted: 10549 D ...
随机推荐
- NFC(11)MifareUltralight格式规范及读写示例
注意 MifareUltralight 不支三种过滤方式之一,只支持第四种(用代码,activity singleTop ) 见 NFC(4)响应NFC设备时启动activity的四重过滤机制 Mi ...
- 【HDOJ】4363 Draw and paint
看题解解的.将着色方案映射为40*40*5*5*5*5*2个状态,40*40表示n*m,5*5*5*5表示上下左右相邻块的颜色,0表示未着色.2表示横切或者竖切.基本思路是记忆化搜索然后去重,关键点是 ...
- Hive QL 介绍
小结 本次课程学习了 Hive QL 基本语法和操作. 一.实验环境说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 2. 环境介绍 本实验环境采用带桌面的 ...
- Target host is not specified错误
对于httpClient4.3访问指定页面,可以从下面的demo抽取方法使用. 注意:对于URL必须使用 http://开始,否则会有如下报错信息: 或者在设置cookie时带上domain: coo ...
- POJ 3096 Surprising Strings(STL map string set vector)
题目:http://poj.org/problem?id=3096 题意:给定一个字符串S,从中找出所有有两个字符组成的子串,每当组成子串的字符之间隔着n字符时,如果没有相同的子串出现,则输出 &qu ...
- bzoj4028
一眼分块题…… 分块,维护每个块的总的gcd和xor和 先思考我们应该怎么查询,考虑到gcd是一个神奇的东西,因为它最多变化logX次 于是我们从前往后扫描每个块,如果一个块内总的gcd是当前扫描的前 ...
- BZOJ1758: [Wc2010]重建计划
题解: 这题我居然做了一星期?... 平均值的极值其实也可以算是一种分数规划,只不过分母上b[i]=1 然后我们就可以二分这个值.类似与 HNOI最小圈 如果没有 链的长度的限制的话,我们直接两遍df ...
- UVA 1349 Optimal Bus Route Design 最优公交路线(最小费用流,拆点)
题意: 给若干景点,每个景点有若干单向边到达其他景点,要求规划一下公交路线,使得每个景点有车可达,并且每个景点只能有1车经过1次,公车必须走环形回到出发点(出发点走2次).问是否存在这样的线路?若存在 ...
- [Bhatia.Matrix Analysis.Solutions to Exercises and Problems]ExI.5.7
Prove that for any vectors $$\bex u_1,\cdots,u_k,\quad v_1,\cdots,v_k, \eex$$ we have $$\bex |\det(\ ...
- Memcache缓存与Mongodb数据库的优势和应用
先说说自己对 Memcache和Mongodb的一些看法,主要是抛砖引玉了,希望看到大家的意见和补充. Memcache Memcache的优势我觉得总结下来主要体现在: 1) 分布式.可以由10台拥 ...