题意:给一有向图,如果A指向B,则A是B的上级。一直i要升职那么他的上级必须都升职。现在给你一个升职人数的区间[a, b],问你升职a人时几个人必被升职,b时几个人必升职,b时几个人没有可能被升职。

思路:打比赛的时候一直想怎么做才能一个dfs直接打出一个节点的所有子节点数,发现总是弄不出来。结果这道题直接暴力搜索每个点的儿子就行了。

我们正向建边求出所有下级(包括自己)son,反向建边求出所有上级(包括自己)fa,那么显然如果n - son < a时,也就是说剩下的人都升职都不够a人,那我肯定升职。如果fa > b时,显然我要升职至少要fa,但是b  < fa,那我就不可能升职。

这题也太暴力了,这谁下得了手。

代码:

#include<set>
#include<map>
#include<stack>
#include<cmath>
#include<queue>
#include<vector>
#include<string>
#include<cstdio>
#include<cstring>
#include<sstream>
#include<iostream>
#include<algorithm>
typedef long longll;
using namespace std;
const int maxn = 5000 + 10;
const int MOD = 1e9 + 7;
const int INF = 0x3f3f3f3f;
vector<int> G[maxn], g[maxn];
int son[maxn], fa[maxn];
bool vis[maxn];
int dfs1(int u){
vis[u] = true;
int ret = 1;
for(int i = 0; i < G[u].size(); i++){
int v = G[u][i];
if(!vis[v])
ret += dfs1(v);
}
return ret;
}
int dfs2(int u){
vis[u] = true;
int ret = 1;
for(int i = 0; i < g[u].size(); i++){
int v = g[u][i];
if(!vis[v])
ret += dfs2(v);
}
return ret;
}
int main(){
int a, b, n, m;
scanf("%d%d%d%d", &a, &b, &n, &m);
for(int i = 0; i < n; i++){
G[i].clear();
g[i].clear();
}
for(int i = 1; i <= m; i++){
int u, v;
scanf("%d%d", &u, &v);
G[u].push_back(v); //正
g[v].push_back(u); //反
}
int ans1 = 0, ans2 = 0, ans3 = 0;
for(int i = 0; i < n; i++){
memset(vis, false, sizeof(vis));
son[i] = dfs1(i);
memset(vis, false, sizeof(vis));
fa[i] = dfs2(i);
if(n - son[i] < a) ans1++;
if(n - son[i] < b) ans2++;
if(fa[i] > b) ans3++;
}
printf("%d\n%d\n%d\n", ans1, ans2, ans3);
return 0;
}

最新文章

  1. Spring Boot 集成MyBatis
  2. xmind的第九天笔记
  3. kFreeBSD当前可以做的和不能做的
  4. uva 1482 - Playing With Stones
  5. php 自定义求数组差集,效率比自带的array_diff函数还要快(转)
  6. B树的实现与源代码二(删除源代码)
  7. android v7兼容包RecyclerView的使用(四)——点击事件的不同方式处理
  8. Linux 下源码编译FFMEG
  9. 链接错误:multiple definition of &#39;xxx&#39; 问题解决及其原理
  10. 设计模式のStatePattern(状态模式)----行为模式
  11. webdriver原理、协议
  12. JVM系列——从菜鸟到入门
  13. CCPC-Wannafly Winter Camp Day4 Div1 - 咆咆咆哮 - [三分+贪心]
  14. 为什么char *name=&quot;it&quot;,printf(&quot;%s&quot;,name) 能够输出字符串?
  15. 2019/3/27 wen 数组排序
  16. Linux文件系统命令 pwd
  17. 【062有新题】OCP 12c 062出现大量之前没有的新考题-16
  18. C# Notes
  19. 【最小割】【网络流24题】【P2762】 太空飞行计划问题
  20. Ajax的两个用法

热门文章

  1. [Usaco2007 Jan]Telephone Lines架设电话线
  2. JS中常用的工具类
  3. Py其他内置函数,文件修改
  4. linux Jumpserver跳板机 /堡垒机详细部署
  5. (08)-Python3之--类和对象
  6. Jmeter接口自动化测试系列之函数使用及扩展
  7. CentOS 镜像下载地址
  8. Centos GitLab 配置
  9. Windows10 通过 ssh 映射 Linux 为盘符
  10. Excel三个下拉互斥