POJ 1634 Who's the boss?
题意:
一个员工A的直接上司是那些薪水大于A,并且身高>=A的人中薪水最少的一个。
主席CEO的薪水最高,且身高也是最高的。
有多组数据。
每组数据给出m个员工,和q个询问。
每个员工有id、薪水、身高。
对于每个询问,给出某个id,让你求该员工的直接上司的id和该员工的下属的个数。
若该员工是CEO,则他的上司的id为0。
先将员工按薪水从小到大排序,然后for循环一遍,求某一节点的直接父亲,顺带求节点的孩子个数。
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <string>
#include <vector>
#include <map> using namespace std;
const int maxn=;
int m,q;
int fa[maxn]; //存储父亲的编号
int head[maxn];
int num[maxn]; //存储以该节点为子树的包含的定点个数
int idx[]; //存储id对映的编号,原先用map存储的,时间是3500ms,后改用数组,时间800+ms
int tot;
//map<int,int> maps;
struct Edge{
int next,to;
}edge[maxn];
void add(int u,int v){
edge[tot].next=head[u];
edge[tot].to=v;
head[u]=tot++;
}
struct Staff{
int idx,id,salary,h;
bool operator<(const Staff tmp)const{
return salary<tmp.salary;
}
}staff[maxn]; void init(){
memset(head,-,sizeof(head));
for(int i=;i<maxn;i++)
num[i]=;
tot=;
//maps.clear();
memset(fa,,sizeof(fa));
} int main()
{
int t,id;
staff[].id=;
cin>>t;
while(t--){
init();
scanf("%d%d",&m,&q);
for(int i=;i<=m;i++){
scanf("%d%d%d",&staff[i].id,&staff[i].salary,&staff[i].h);
}
sort(staff+,staff+m+);
for(int i=;i<=m;i++){
//maps[staff[i].id]=i;
idx[staff[i].id]=i;
for(int j=i+;j<=m;j++){
if(staff[j].salary>staff[i].salary && staff[j].h>=staff[i].h){
add(j,i);
fa[i]=j;
num[j]+=num[i];
break;
}
}
}
int u;
for(int i=;i<=q;i++){
scanf("%d",&id);
u=idx[id];
//printf("%d %d\n",staff[fa[u]].id,num[u]-1);
printf("%d %d\n",staff[fa[u]].id,num[u]-);
}
}
return ;
}
POJ 1634 Who's the boss?的更多相关文章
- poj 1634
题意:给你m个员工,和n次的查询. 每个员工有他独立的id,收入,和身高 上司的收入一定大于下属的收入,身高也是大于等于下属的. 每个公司的头头没有上司,上司的编号为0,,同时他也是收入最多身高最高的 ...
- POJ 题目分类(转载)
Log 2016-3-21 网上找的POJ分类,来源已经不清楚了.百度能百度到一大把.贴一份在博客上,鞭策自己刷题,不能偷懒!! 初期: 一.基本算法: (1)枚举. (poj1753,poj2965 ...
- POJ 2051
http://poj.org/problem?id=2051 这个题目的大题意思就是给你一些ID,和ID所对应的周期,每隔它所对应的周期,它的任务就会执行,就会输出所对应的ID Register 20 ...
- (转)POJ题目分类
初期:一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. (4)递推. ...
- poj分类
初期: 一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. ( ...
- poj 题目分类(1)
poj 题目分类 按照ac的代码长度分类(主要参考最短代码和自己写的代码) 短代码:0.01K--0.50K:中短代码:0.51K--1.00K:中等代码量:1.01K--2.00K:长代码:2.01 ...
- poj 1265 Area (Pick定理+求面积)
链接:http://poj.org/problem?id=1265 Area Time Limit: 1000MS Memory Limit: 10000K Total Submissions: ...
- POJ题目分类(按初级\中级\高级等分类,有助于大家根据个人情况学习)
本文来自:http://www.cppblog.com/snowshine09/archive/2011/08/02/152272.spx 多版本的POJ分类 流传最广的一种分类: 初期: 一.基本算 ...
- POJ题目分类(转)
初期:一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. (4)递推. ...
随机推荐
- move和转发
总的来说C++09跟C++98相比的变化是极其重大的.这个变化体现在三个方面,一个是形式上的变化,即在编码形式层面的支持,也就是对应我们所谓的编程范式(paradigm).C++09不会引入新的编程范 ...
- hdu 1890 Robotic Sort
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1890 如下: #include<cstdio> #include<cstdlib&g ...
- bzoj 3223/tyvj 1729 文艺平衡树 splay tree
原题链接:http://www.tyvj.cn/p/1729 这道题以前用c语言写的splay tree水过了.. 现在接触了c++重写一遍... 只涉及区间翻转,由于没有删除操作故不带垃圾回收,具体 ...
- Android中焦点移到ListView的有关问题
一个解决办法 这不是一个根本解决的方法:写一个新的class,继承ListView,覆盖onFocusChanged. @Override protected void onFocusChanged( ...
- mousewheel滚轮事件
原生的滚轮事件:火狐与其他浏览器使用了不同的事件 /* * 滚轮事件只有firefox比较特殊,使用DOMMouseScroll; 其他浏览器使用mousewheel; * */ // firefox ...
- What is the difference between position: static,relative,absolute,fixed
What is the difference between static,relative, absolute,fixed we can refer to this link: expand
- [小技巧]让C#的空值处理变得更优雅
参考 http://www.codeproject.com/Articles/739772/Dynamically-Check-Nested-Values-for-IsNull-Values?msg= ...
- Qt之SQL数据库
---------------------------- http://blog.csdn.net/reborntercel/article/details/6991147 http://blog.c ...
- JAVA事务
一.什么是事务 我们通常会认为事务与数据库有关. 事务是访问数据库的一个操作序列,数据库应用系统通过事务集来完成对数据库的操作.事务的正确执行使得数据库从一种状态转换成另外一种状态. 事务必须服从IS ...
- iTween基础之Color(变换颜色)
一.基础介绍:二.基础属性 原文地址: http://blog.csdn.net/dingkun520wy/article/details/51065275 一.基础介绍 ColorTo:从当前颜色变 ...