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.pswp.cn/bicheng/17312.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/17312.shtml
英文地址,請注明出處:http://en.pswp.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; 下載鏈接