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)递推. ...
随机推荐
- WPF实现3D翻转的动画效果
1.前端代码实现 1.1 原理见代码注析 <Grid MouseDown="Grid_MouseDown"> <Viewport3D> <Viewpo ...
- 《Prism 5.0源码走读》 设计模式
Prism或Prism构建的应用程序时会使用大量的设计模式,本文简要列举Prism相关的那些设计模式. Adapter(适配器模式):Prism Library主要在Region和IoC contai ...
- 老工程升级到VS2010或以上时会出现 libc.lib 解决方法
有些网上的工程都比较老,比如用2003之类.一般会有个静态libc.lib.在新版本里已经没有这个库,被微软无情的抛弃. 编译时会出现动态库找不到: 1>LINK : fatal error L ...
- HTML5简略介绍
今天要说下 HTML5特有的一个元素 canvas ,旨在让web页面上作矢量图不需要在依靠flash或是其他插件,在网页上使用canvas元素时,它会创建一块矩形区域,默认300*150,当然也是可 ...
- UIAlertController——之Block回调
iOS8.0之后出现的提示框 =.=,比自己去改block回调要好.
- 52.ISE中的PLL时钟输入
在manaul mode中选择PLL PLL的输入时钟可以是全局时钟,也可以是普通IO引脚. 1.PLL的输入时钟是全局时钟的情况. pll_xx pll_xx ( .clkin ( clkin ), ...
- Jsp实现筛选并压缩文件批量下载
Jsp实现筛选并压缩文件批量下载 首先明确一下需求,网页端点击一下button,传递特定的参数到download.jsp网页,筛选文件,对过滤得到的文件进行压缩,然后返回前端一个压缩包下载. 以下的代 ...
- P3245: 最快路线
这道题其实还是不难的,只是自己搞混了=-=//晕,做了好久啊,其实就是个spfa,关键是存储路径搞昏了.输出格式要求太严了,航模不能有空格啊,所以因为格式WA了三次,哭啊/(ㄒoㄒ)/~~.贴上代码吧 ...
- 邻接表实现Dijkstra算法以及DFS与BFS算法
//============================================================================ // Name : ListDijkstr ...
- apache-activemq-5.14.0学习总结
一.什么是ActiveMQ? 百度百科对ActiveMQ的描述: