题意

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

分析

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

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

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

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

代码如下:

 1     #include <cstdio>
 2     #include <algorithm>
 3     #include <cstring>
 4     #include <iostream>
 5     #include <vector>
 6     #include <queue>
 7     using namespace std;
 8     const int maxn=5000+10;
 9     const int maxm=20000+10;
10     vector<int>G[3][maxn];
11     int vis[maxn];
12     int A,B,E,P;
13     int a,b;
14     int ansa,ansb,ansc;
15     int num[maxn];
16     void dfs(int n,int u,int o){
17         vis[u]=1;
18         num[o]++;
19         for(int i=0;i<G[n][u].size();i++){
20             int v=G[n][u][i];
21             if(!vis[v])
22             dfs(n,v,o);
23         }
24         return ;
25     }
26     int main(){
27         ansa=ansb=ansc=0;
28         scanf("%d%d%d%d",&A,&B,&E,&P);
29         memset(num,0,sizeof(num));
30         for(int i=1;i<=P;i++){
31             scanf("%d%d",&a,&b);
32             G[1][a].push_back(b);
33             G[2][b].push_back(a);
34         }
35         for(int i=0;i<E;i++){
36             memset(vis,0,sizeof(vis));
37             dfs(1,i,i);
38         }
39         for(int i=0;i<E;i++){
40             if(num[i]>E-A)ansa++;
41             if(num[i]>E-B)ansb++;
42         }
43         memset(num,0,sizeof(num));
44         for(int i=0;i<E;i++){
45             memset(vis,0,sizeof(vis));
46             dfs(2,i,i);
47         }
48
49         for(int i=0;i<E;i++){
50             if(num[i]>B)ansc++;
51         }
52         cout<<ansa<<endl;
53         cout<<ansb<<endl;
54         cout<<ansc<<endl;
55     return 0;
56     }

View Code

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

转载于:https://www.cnblogs.com/LQLlulu/p/8818170.html

Gym 101128A :Promotions (Southwestern Europe Regional Contest )相关推荐

  1. 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\ ...

  2. 2021 ICPC Southeastern Europe Regional Contest Werewolves(树上背包)

    2021 ICPC Southeastern Europe Regional Contest Werewolves(树上背包) 链接 题意:给出一个n个节点的树(n≤3000n\le3000n≤300 ...

  3. 2021 ICPC Southeastern Europe Regional Contest(更新至六题)

    2021 ICPC Southeastern Europe Regional Contest A题签到 A. King of String Comparison 题意:给两个字符串,找出有多少对(l, ...

  4. CSP:CSP认证考试:202109-2(非零段划分)70分答案,Java版

    CSP:CSP认证考试:202109-2(非零段划分)70分答案,Java版 一.题目: 二.Java70分答案 import java.util.ArrayList; import java.uti ...

  5. 数字图像处理学习笔记(二):SIFT(尺度不变特征变换)算法

    数字图像处理学习笔记(二):SIFT(尺度不变特征变换)算法 一.概述: 提到特征点算法,首先就是大名鼎鼎的SIFT算法了.SIFT的全称是Scale Invariant Feature Transf ...

  6. Python+OpenCV:高动态范围(High Dynamic Range, HDR)

    Python+OpenCV:高动态范围(High Dynamic Range, HDR) 目标 Learn how to generate and display HDR image from an ...

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

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

  8. 自学SQL网习题题解:0-12(带内容解析!)

    自学SQL网习题题解:0-12(带内容解析!) 原创:丶无殇  2022-07-17 这是一个自学SQL的中文网站,基础内容质量高,语言简洁明了,能够快速学习并提升技能. 网址:http://xues ...

  9. easyx游戏编程:五子棋(C语言游戏开发)

    easyx游戏编程:五子棋(C语言游戏开发) 五子棋: 本游戏用到了图形界面库graphics.h,图形界面库下载安装: 下载链接: https://easyx.cn/downloads/. 下方有源 ...

最新文章

  1. gc java root_一个两年Java程序员的面试总结
  2. Redis数据库 安装
  3. C#和javascript的简单交互
  4. 中国小金属行业十四五供应需求及发展前景研究报告2021版
  5. python装饰器参数讲解_python装饰器的详细解析
  6. 产品经理面试全流程深度复盘【面试准备篇】
  7. 1.2. Cisco IOS Firewall
  8. python 函数结果缓存一段时间的装饰器
  9. echarts legend位置_一起读 ECharts 配置项手册之 series[i]-line(上)
  10. python编程语言_Python编程语言的历史
  11. 安卓打开本应用的应用信息界面的代码
  12. 如何在Java语言编程中,如何输入一个char型字符
  13. FAT32 文件系统详解
  14. linux的百度网盘客户端
  15. Echarts实现饼图+饼图中心文字显示
  16. reflets 第零课 课文涉及内容介绍及翻译
  17. linux系统下html工具,Linux下五个好用的HTML编缉器
  18. Redis 动态字符串(SDS)底层原理详解
  19. 最快接收计算机sci,投稿到接收仅用四天,这大概是发表最快的sci了!?
  20. 数学之美2 - 概率篇

热门文章

  1. linux 下的csp 模块,linux kernel 中MIGRATE_TYPES的理解
  2. Qt工作笔记-各种构造函数汇总以及运算符重载(入门必备)
  3. 华为什么手机用的鸿蒙系统,华为2020年全线启用鸿蒙系统,手机、平板依然Android优先...
  4. 和lua的效率对比测试_N99 KF94 KN95 真假口罩及 KN90 KN95面罩滤棉过滤效率对比测试...
  5. python file read和write的速度_python file.truncate() 然后 file.write() file.read() 出现乱码...
  6. web加减乘除法c#_C#的加减乘除的问题
  7. php如何封装类内乡通南阳的_PHP类(三)-类的封装
  8. 前端基础-html-链接标签的介绍
  9. 推动Windows的限制:进程和线程
  10. 全面介绍Windows内存管理机制及C++内存分配实例(六):堆栈