题意

一个公司里有E个员工P个上下级关系。这个公司有一种晋升制度。如果要晋升员工a,那么必须要先晋升a的所有领导。给出一个区间[A,B],如果要晋升A个员工,有哪些员工是一定会被晋升的?如果要晋升B个员工,有哪些员工是一定会被晋升的?如果晋升B个员工,有哪些员工是一定不会被晋升的?

分析

这个描述再加上那个样例的图片实在太TM像拓扑排序了啊!当时在场上写了个拓扑排序然后WA的很惨

如果要晋升A个员工,哪些员工是一定会被晋升的?当这个员工的下属数量(包括他自己)大于n-A的时候,则必须晋升它

那么对于每个员工跑dfs统计出它下属的数量就可以。

如果要晋升B个员工,哪些员工是一定不会被晋升的?当这个员工的上司数量大于B的时候,它一定不会被晋升。那么把图反过来,再对每个员工跑一遍dfs就可以,方法和上面一样。

代码如下:

     #include <cstdio>
#include <algorithm>
#include <cstring>
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
const int maxn=+;
const int maxm=+;
vector<int>G[][maxn];
int vis[maxn];
int A,B,E,P;
int a,b;
int ansa,ansb,ansc;
int num[maxn];
void dfs(int n,int u,int o){
vis[u]=;
num[o]++;
for(int i=;i<G[n][u].size();i++){
int v=G[n][u][i];
if(!vis[v])
dfs(n,v,o);
}
return ;
}
int main(){
ansa=ansb=ansc=;
scanf("%d%d%d%d",&A,&B,&E,&P);
memset(num,,sizeof(num));
for(int i=;i<=P;i++){
scanf("%d%d",&a,&b);
G[][a].push_back(b);
G[][b].push_back(a);
}
for(int i=;i<E;i++){
memset(vis,,sizeof(vis));
dfs(,i,i);
}
for(int i=;i<E;i++){
if(num[i]>E-A)ansa++;
if(num[i]>E-B)ansb++;
}
memset(num,,sizeof(num));
for(int i=;i<E;i++){
memset(vis,,sizeof(vis));
dfs(,i,i);
} for(int i=;i<E;i++){
if(num[i]>B)ansc++;
}
cout<<ansa<<endl;
cout<<ansb<<endl;
cout<<ansc<<endl;
return ;
}

另外当时想的拓扑排序为啥是错的呢,当时是觉得跑一遍拓扑排序然后找出每个拓扑顺序上员工的数量,然后由低到高加起来只要现在的数量不超过A。然后这就是一定会被晋升的人数。但是这个晋升关系和拓扑序是有区别的。就拿样例来说,如果要晋升两个员工,按照这种拓扑思想,0和6都是一定会被晋升的,因为他们的拓扑序都是第一个,但题目并不是这个意思,因为晋升了0以后,1也可以得到晋升了,那么晋升两个员工有可能晋升0和6,也可能晋升0和1,所以一定被晋升的只有0结点自己。

Gym 101128A :Promotions (Southwestern Europe Regional Contest )的更多相关文章

  1. Southwestern Europe Regional Contest 2014 题解

    时间:2017/9/8 题目8/10 Rank 5/150 体会:三星的题目和国内区域赛差距大,大多数题读懂题意就能做,所以静心读题是关键,套路性太深. A: 题意:给出一个算式,算式中的数字用大写字 ...

  2. Southwestern Europe Regional Contest 2015 题解

    题目链接:http://codeforces.com/gym/101128 题目数7/10 Rank 34/209 A: 题意:给出一张n个点的有向图表示一家有n个员工的公司的隶属图,u->v表 ...

  3. Gym - 101201E:Enclosure (点到凸包的切线)

    题意:给点N棵树,前K棵是已经拥有的,现在可以再拥有一棵树,问形成的最大凸包面积. 思路:先求K棵树的凸包C,然后对于后面的N-K棵树,我们先判断是否在凸包内,如果不在,我们要求两个切线. 这里分类讨 ...

  4. 【优先级队列】Southwestern Europe Regional Contest Canvas Painting

    https://vjudge.net/contest/174235#problem/D [题意] 给定n个已知size的帆布,要给这n块帆布涂上不同的颜色,规则是这样的: 每次选择一种颜色C 对于颜色 ...

  5. 【枚举】Southwestern Europe Regional Contest H - Sheldon Numbers

    https://vjudge.net/contest/174235#problem/H [题意] 求[x,y]之间有多少个Sheldon Number Sheldon Number是二进制满足以下条件 ...

  6. 2015-2016 ACM-ICPC Southwestern Europe Regional Contest (SWERC 15)

    C. Canvas Painting 合并果子. E. Wooden Signs \(dp(i,l,r)\)表示第\(i\)块木板的长度区间为\([l,r]\)的方案数,根据题意,\(l\)或\(r\ ...

  7. 最简单的基于librtmp的示例:发布(FLV通过RTMP发布)

    ===================================================== 最简单的基于libRTMP的示例系列文章列表: 最简单的基于librtmp的示例:接收(RT ...

  8. 最简单的基于librtmp的示例:接收(RTMP保存为FLV)

    ===================================================== 最简单的基于libRTMP的示例系列文章列表: 最简单的基于librtmp的示例:接收(RT ...

  9. 开发框架-.Net:Learun(力软敏捷开发)

    ylbtech-开发框架-.Net:Learun(力软敏捷开发) 1.返回顶部   2.返回顶部 1. 系统简介:(1)后台采用MVC+EF架构,前台使用Jquery+Bootstrap,界面美观大气 ...

随机推荐

  1. Python 字符串相似性的几种度量方法

    字符串的相似性比较应用场合很多,像拼写纠错.文本去重.上下文相似性等. 评价字符串相似度最常见的办法就是:把一个字符串通过插入.删除或替换这样的编辑操作,变成另外一个字符串,所需要的最少编辑次数,这种 ...

  2. 本站上线KMS服务~一句命令激活windows和office

    服务器地址:kms.luody.info 更新: 脚本维护更新:2016-09-29 服务端版本:vlmcsd-1108-2017-01-19-Hotbird64 服务作用:在线激活windows和o ...

  3. markdown 语法汇总

    Markdown是什么? Markdown是一种轻量级标记语言,它以纯文本形式(_易读.易写.易更改_)编写文档,并最终以HTML格式发布. Markdown也可以理解为将以MARKDOWN语言编写的 ...

  4. 网络爬虫必备知识之requests库

    就库的范围,个人认为网络爬虫必备库知识包括urllib.requests.re.BeautifulSoup.concurrent.futures,接下来将结对requests库的使用方法进行总结 1. ...

  5. asp.net core mcroservices 架构之 分布式日志(三):集成kafka

    一 kafka介绍 kafka是基于zookeeper的一个分布式流平台,既然是流,那么大家都能猜到它的存储结构基本上就是线性的了.硬盘大家都知道读写非常的慢,那是因为在随机情况下,线性下,硬盘的读写 ...

  6. Python错误TypeError: write() argument must be str, not bytes

    2016-07-03 20:51:25 今天使用Python中的pickle存储的时候出现了以下错误: TypeError: write() argument must be str, not byt ...

  7. LeetCode Design TinyURL

    原题链接在这里:https://leetcode.com/problems/design-tinyurl/description/ 题目: How would you design a URL sho ...

  8. LeetCode Valid Parenthesis String

    原题链接在这里:https://leetcode.com/problems/valid-parenthesis-string/description/ 题目: Given a string conta ...

  9. 【转载】Allegro Auto Rename器件反标注教程

    Cadence设计时一般不主张在PCB文件中更改Logic(PADS的ECO更改),不过Auto Rename仍然是非常实用的功能,按照布局重排位号,可以让PCB的丝印标识更清晰,容易检查,位号易找, ...

  10. gatsbyjs 使用

    1. 安装 npm install --global gatsby-cli 2. 使用 // 创建项目 gatsby new dalong cd dalong // 启动 gatsby develop ...