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)递推. ...
随机推荐
- mysql Unknown table engine 'InnoDB'解决办法
最近做项目时,由于数据库存的中文乱码.改了一下配置.中文乱码改过来了,但是在导入数据时Unknown table engine 'InnoDB' 百度上各种拷贝.最后看了下InnoDB.是一种支持事 ...
- WPF:将HTML RGB颜色值转化为Color对象的两种方式
(1)方式一: Color color1 = (Color)System.Windows.Media.ColorConverter.ConvertFromString("#E0E0E0&qu ...
- 文件系统 第八次迭代 VFS相关说明
麻烦访问evernote链接 http://www.evernote.com/shard/s133/sh/53e5b5ac-1192-4910-8bd5-6886218562af/59516c32a5 ...
- 从数组->ArrayList->List 为了方便与安全在不断变化着
在C#中,当我们想要存储一组对象的时候,就会想到用数组,ArrayList,List这三个对象了. 数组 优点优点之一:数组在内存中是连续存储的,所以它的索引速度是非常的快,而且赋值与修改元素也很简单 ...
- eclipse java.lang.OutOfMemoryError: Java heap space
1.手动编译运行需要添加 java -Xms256m -Xmx1024m classname 2.在eclipse中,在run as -> run configurations -> ar ...
- hdu 5154 Harry and Magical Computer
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5154 Harry and Magical Computer Description In reward ...
- "奇葩家园“之 asyncTask 与 url 下载篇
asyncTask 是android提供的一个轻量级的异步处理的类,有3个泛型参数,params,progress,result params: 启动任务执行的时候传入的参数比如请求的 url 地址 ...
- 安装Ubuntu 15.10后要做的事
Ubuntu 15.10发布了,带来了很多新特性,同样也依然带着很多不习惯的东西,所以装完系统后还要进行一系列的优化. 1.删除libreoffice libreoffice虽然是开源的,但是Java ...
- SQL Server数据库学习笔记-外键
关于主键的话大家很好理解,主键的主要作用就是用来标识一条数据是唯一的,也就是保证数据的实体完整性.防止数据重复.但是外键的话就有许多的疑问了,那外键是咋回事儿呢? 1. 外键的定义: 外键(FK)是用 ...
- 解决sharepoint 2010 用户配置文件同步服务 正在启动
用户配置文件同步服务一直显示“正在启动”,而且无法停止,如下办法可以停止这个服务: 在sharepoint power shell 中执行下面的命令: Get-spserviceinstance 获取 ...