2023山东ICPC省赛Problem B.建筑公司(拓扑排序)

2023 山东 I C P C 省赛 P r o b l e m B . 建筑公司 \Huge{2023山东ICPC省赛Problem B.建筑公司} 2023山东ICPC省赛ProblemB.建筑公司

文章目录

  • 题意
  • 思路
  • 标程

比赛链接:Dashboard - The 13th Shandong ICPC Provincial Collegiate Programming Contest - Codeforces

官方题解:B - 建筑公司 - SUA Wiki

题意

题目给出若干中工种和每类工种的人数,然后给出若干项工程,每项工程的性质有:

  1. 完成该项工程所需的各工种人数。
  2. 完成该项工程后可以增加的每类工种人数。要求求出最多能够完成多少项工程?

每项工程需要完成的时间忽略不计,可以理解为只要各工种人数满足该工程所需人数,则和获取此工程的增加人数,并且需要完成该工程的人数不会消耗

思路

我们可以简化题目,看作每项工程只需一类工种,那么自然很容易想到拓扑排序

但是这道题稍微复杂一些,每项工程需要的工种种类多一些。

我们考虑对于每项工程建立拓扑图,并且把每项工程所需的各工种人数看作是连接在工程上的节点,若现有工种人数大于该工程的所需人数,则将该工种所代表的节点从该工程上去掉;若某工程的入度 0 0 0,则表示该工程所有需要的工人数量都满足,那么就可以完成该工程,并且将该工程可增加的工种人数加上。

需要注意的是:本题的重点是如何删除每个工程上的节点(工程需要的工种人数)?

  • 可行的做法是:可以将每个工种数量不满足的工程给存起来然后排序。
  • 具体排序规则为:将需要该工种的工程根据需要的数量从小到大排序。
  • 容易知道,若当前度不为 0 0 0的节点,只有其工种人数增加后,该节点才可能被消除。

注意点已详细注释在标程代码中,以便理解。

标程

#include<bits/stdc++.h>using namespace std;#define IOS ios::sync_with_stdio(false); cin.tie(nullptr), cout.tie(nullptr);
#define LL long long 
#define ULL unsigned long long 
#define PII pair<int, int>
#define lowbit(x) (x & -x)
#define Mid ((l + r) >> 1)
#define ALL(x) x.begin(), x.end()
#define endl '\n'
#define fi first 
#define se secondconst int INF = 0x7fffffff;
const int Mod = 1e9 + 7;
const int N = 2e5 + 10;int g, n, k, m, t, u;
map<int, int> a;//a存每个工种的人数
map<int, priority_queue<PII, vector<PII>, greater<PII>>> q;//存每个工种数量不满足的工程
vector<PII> v[N];//v存每个工程可增加的每个工种人数
vector<int> c(N);//c存每个工程缺的工种数量
queue<int> qu;//存当前入度为0的工程void Solved() {cin >> g;for(int i = 1; i <= g; i ++ ) {//记录各工种人数cin >> t >> u;a[t] = u;}cin >> n;for(int i = 1; i <= n; i ++ ) {cin >> m;for(int j = 1; j <= m; j ++ ) {//每项工程需要人数cin >> t >> u;if(a[t] < u) {             //只保存还需要的人数就行(找出初始入度为0的工程)c[i] ++;q[t].push({u, i});}}cin >> k;for(int j = 1; j <= k; j ++ ) {//每项工程增加人数cin >> t >> u;v[i].push_back({t, u});}}for(int i = 1; i <= n; i ++ ) {//先将入度为0的工程处理掉if(!c[i]) qu.push(i);}int res = 0;//q[i]表示对于第i种工人人数,不满足哪些工程//qu中存放当前入度为0的工程while(!qu.empty()) {int i = qu.front(); qu.pop();res ++;//对于每个工种,只有其数量增加,才能完成其他工程,所以只需要判断增加的工种即可for(auto f : v[i]) {t = f.fi, u = f.se;a[t] += u;            //添加当前工程可增加的各工种人数while(!q[t].empty()) {//判断当前所有需要工种t的工程PII p = q[t].top();if(a[t] >= p.fi) {c[p.se] --;q[t].pop();//若当前工程需要的人都满足,则该工程入度为0if(c[p.se] == 0) qu.push(p.se);} else {//对于当前工种,若工程不满足,则先跳过break;}}}}cout << res << endl;
}signed main(void) {IOSint ALL = 1; // cin >> ALL;while(ALL -- ) Solved();// cout << fixed;//强制以小数形式显示// cout << setprecision(n); //保留n位小数return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/17312.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OWASP top10--SQL注入(三、手工注入)

目录 access数据库 手工注入过程&#xff1a; 猜解数据库表名 猜解数据库表名里面的字段 猜解字段内容 SQL注入中的高级查询 mssql数据库 手工注入过程&#xff1a; sa权限 ​编辑dbowner权限 public权限 mysql数据库 1、对服务器文件进行读写操作(前提条件) 需要知…

文刻创作ai工具官网免费工具

文刻创作ai工具官网免费工具 Docshttps://iimenvrieak.feishu.cn/docx/O0UedptjbonN4UxyEy7cPlZknYc 文刻是一种可以帮助用户进行创作的AI工具。 它使用自然语言处理和机器学习技术&#xff0c;可以生成文章、故事、诗歌等文本内容。 用户可以通过输入一些关键词或指定一定的…

浙江大学数据结构MOOC-课后习题-第七讲-图4 哈利·波特的考试

题目汇总 浙江大学数据结构MOOC-课后习题-拼题A-代码分享-2024 题目描述 代码展示 照着教程视频来的&#xff0c;没啥好说的捏 #include <cstdlib> #include <iostream>#define MAXSIZE 100 #define IFINITY 65535 typedef int vertex; typedef int weightType;/…

为什么大部分新手做抖音小店赚不到钱?

大家好&#xff0c;我是喷火龙。 今天来给大家聊聊&#xff0c;为什么大部分新手做抖店赚不到钱&#xff1f; 不知道大家想过这个问题没有&#xff0c;可能有些人把赚不到钱的原因归结于市场、或者平台、又或者运营技术以及做店经验。 但我觉得这些都不是重点&#xff0c;重…

FFmpeg 使用文档介绍二:命令行选项

关于FFmpeg的细节描述可以参考:FFmpeg 使用文档介绍一:细节描述和流选择 命令行选项 所有数值选项,除非另有说明,都接受一个表示数字的字符串作为输入,该字符串后面可以跟一个国际单位制(SI)的单位前缀,例如:‘K’(千)、‘M’(兆)或’G’(吉)。 如果将i附加到S…

爬虫实战教程:深入解析配乐网站爬取1000首MP3

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言 二、实战前准备 1. 选择目标网站 2. 分析网页结构 三、爬虫工作流程详解 1. 发…

高质量软件开发的全面指南(MIT-6.031)

首先&#xff0c;通过静态检查&#xff08;Static Checking&#xff09;和动态检查&#xff08;Dynamic Checking&#xff09;了解类型和变量的使用规则&#xff0c;学习如何编写文档和注释来记录假设和方法&#xff08;Assumptions and Methods&#xff09;。详细内容请见&…

Curator Framework如何写单元测试

概述 使用curator framework框架去操作zookeeper时&#xff0c;我们知道因其的方法风格是那种流式的编写风格&#xff0c;所以我们在写单元测试的时候要把链接zookeeper的操作给mock掉&#xff0c;那么着实是不太好写单测。不过好在curator framework有一个专门用于测试的模块…

诚心分享!主食冻干横向对比:希喂、爱立方、K9等谁最值得入手?

主食冻干到底有必要喂吗&#xff1f;七年铲龄铲屎官告诉你&#xff0c;是真的很有必要喂&#xff01; 这些年随着宠物经济的发展、科学养宠的普及&#xff0c;现在养猫不仅局限在让猫吃饱就行&#xff0c;更多人开始关注到猫的饮食健康。大量的实际喂养案例证明了&#xff0c;传…

第2章 物理层

王道学习 考纲内容 &#xff08;一&#xff09;通信基础 信道、信号、带宽、码元、波特、速率、信源与信宿等基本概念&#xff1b; 奈奎斯特定理与香农定理&#xff1b;编码与调制&#xff1b; 电路交换、报文交换与分组交换&#xff1b;数…

接口响应断言-json

json认识JSONPath源码类学习/json串的解析拓展学习 目的&#xff1a;数据返回值校验测试 json认识 json是什么-是一种数据交换格式&#xff0c;举例平时看到的json图2&#xff0c;在使用中查看不方便&#xff0c;会有格式转化的平台&#xff0c;json格式的展示 JSON在线视图…

推荐二轮电动车仪表盘蓝牙主芯片方案-HS6621CGC

随着国内二轮电动车的火热开启&#xff0c;电动车的智能化程度越来越高&#xff1b;电动车的智能操控需求也越来越高&#xff0c;现在介绍蓝牙控制面板的一些功能&#xff1b;例如&#xff1a;定位&#xff08;GNSS&#xff09;&#xff0c;设防&#xff0c;实时上报数据&#…

rocketmq跨版本升级方案参考—— 筑梦之路

这篇文章写的比较好&#xff0c;可以作为参考&#xff0c;抽空再来按照这个思路进行实践实验。 https://www.cnblogs.com/zhyg/p/10132598.html 对于rocketmq和kafka如何选择&#xff0c;可阅读搭建项目 Kafka 和 RocketMQ 你选哪个&#xff1f;

什么是光栅化?

一、 什么是光栅化? 光栅化作用是将几何数据变换后转换为像素呈现在显示设备上的一个过程。几何数据转换为像素&#xff0c; 本质是坐标变换、几何离散化&#xff0c;如下&#xff1a; 其中包含了坐标变换和几何离散化&#xff1a; 二、光栅化完成了什么 3D中&#xff0c;物…

element-ui 实现输入框下拉树组件(2024-05-23)

用element-ui的 el-input&#xff0c;el-tree&#xff0c;el-popover组件组合封装 import url("//unpkg.com/element-ui2.15.14/lib/theme-chalk/index.css"); <script src"//unpkg.com/vue2/dist/vue.js"></script> <script src"//…

枣庄高防服务器如何实现全球覆盖?

利用 枣庄高防服务器如何实现全球覆盖&#xff1f; 嗨&#xff0c;亲爱的读者们&#xff01;今天我们将带你探索如何利用枣庄高防服务器实现全球覆盖&#xff0c;让你的网站在世界各地都能稳定快速地访问。而我们这次推荐的服务器商是莱卡云&#xff08;Lcayun&#xff09;&am…

C数据结构:二叉树

目录 二叉树的数据结构 前序遍历 中序遍历 后序遍历 二叉树的创建 二叉树的销毁 二叉树的节点个数 二叉树叶子节点个数 二叉树第K层节点个数 二叉树的查找 层序遍历 判断二叉树是否为完全二叉树 完整代码 二叉树的数据结构 typedef char BTDataType; typedef str…

使用numpy手写一个神经网络

本文主要包含以下内容&#xff1a; 推导神经网络的误差反向传播过程使用numpy编写简单的神经网络&#xff0c;并使用iris数据集和california_housing数据集分别进行分类和回归任务&#xff0c;最终将训练过程可视化。 1. BP算法的推导过程 1.1 导入 前向传播和反向传播的总体…

Three.js——相机

在Three.js中&#xff0c;相机&#xff08;Camera&#xff09;是用于定义视图和渲染场景的一个关键组件。相机决定了你从哪个角度和位置观察场景中的物体&#xff0c;以及如何呈现这些物体。Three.js 提供了几种不同类型的相机&#xff0c;每种相机都有其特定的用途和特性。以下…

Unity OutLine 模型外描边效果

效果展示&#xff1a; 下载链接