HDU 3572 Task Schedule

傳送門

作業調度,這道題還真沒想到能用網絡流。。。。乍一看跟背包問題差不多。
N個作業,M個機器,每個作業給你一個耗費時間(時間段)以及最早開始時間和最晚完成時間(這兩個是時間點),單位是天。一個作業同時只能被一個機器做,一個機器同時也只能做一個作業,但是,可以只做一部分,之后可以切換別的機器做。一部分指的是整數天。
在這里插入圖片描述
畫個圖。把數據處理成上面這個圖,然后按照最大流求解就ojbk了,看看最后的最大流是不是P1+P2+P3+...+PN(最大流必然小于等于這個,因為從源點輸出就這么些)
源點輸出到每個作業,權值等于這個作業的耗費時間P,代表你這個作業要處理P次(每次1天);然后的N+1,N+2這些代表具體的某一天(整體上不一定連續每天都有,要根據每個作業的上下限來定),比如第一個作業的上下限是[N+1,N+3],那么就把這個作業和這個上下限內的每一天都連上一條邊,權值是1(此時不用關心這個作業的花費時間,因為前面從源點連的邊已限制這一點),權值是1表示某一天內只能處理這個作業1天的完成量(這不是廢話么);然后,代表某一天的每個點都要和匯點連上一條權值為M的邊,代表這一天最多能同時處理M個作業(因為機器只有M個)。
這個圖并不關心某個作業被具體哪些機器處理,因為這個不重要。只關心某個作業必須在哪些天內被處理,以及某一天最多同時處理多少個作業。

這個題還有個問題,就是他沒說清楚P<=E-S還是P<=E-S+1。這關系到在上面的圖中某個作業要連接E-S個點還是E-S+1個點。
當然,在樣例中的第二個輸出為Yes說明了是后者。但是真的夠sb的。

【19.3.18 想法】今天結合HDU 2883這個題,突然想到一個問題:該方法怎么保證某機器某一天一定處理某任務1天的工作量?而不是0.5個工作量?(也就是說從某任務點某天數點的流量會不會大于0小于1?)
答案是不會的,因為P_NM這些值都是整數且大于等于1,考慮最大流算法尋找增廣路的過程,權值為1的邊肯定是整條路上權值最小的邊,這條路的流量不可能比1再小了。

dinic

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <vector>
#include <cstring>
#include <string>
#include <queue>
using namespace std;const int MAX = 500 + 500 + 2 + 10;
const int INF = 1e9;
int N, M, T;
int flow;
int sum;struct Edge
{int f, t, flow, cap;
};
vector<Edge> ve;
vector<int> v[MAX];int P, S, E;
bool vis[MAX];
int level[MAX];
int cur[MAX];void addEdge(int from, int to, int weight)
{ve.push_back(Edge{ from,to,0,weight });ve.push_back(Edge{ to,from,0,0 });v[from].push_back(ve.size() - 2);v[to].push_back(ve.size() - 1);
}void init()
{ve.clear();for (int i = 0; i <= N + 500 + 1; i++)v[i].clear();flow = sum = 0;memset(vis, 0, sizeof vis);
}bool bfs(int t)
{memset(level, -1, sizeof level);queue<int> q;q.push(0);level[0] = 0;for (; !q.empty();){int x = q.front();q.pop();for (int i = 0; i < v[x].size(); i++){Edge &e = ve[v[x][i]];if (level[e.t] < 0 && e.flow < e.cap){level[e.t] = level[x] + 1;q.push(e.t);}}}return level[t] >= 0;
}int dfs(int n, int t, int f)
{if(n == t || f == 0) return f;                   //for (int& i = cur[n]; i < v[n].size(); i++){Edge& e = ve[v[n][i]];int f0;if (level[e.t] == level[n] + 1 && (f0 = dfs(e.t, t, min(f, e.cap - e.flow))) > 0){e.flow += f0;ve[v[n][i] ^ 1].flow -= f0;return f0;}}return 0;
}int main()
{scanf("%d", &T);for (int cnt = 1; cnt <= T; cnt++){scanf("%d%d", &N, &M);init();for (int i = 1; i <= N; i++){scanf("%d%d%d", &P, &S, &E);if (P > E - S + 1)                      //{printf("Case %d: No\n\n", cnt);return 0;}addEdge(0, i, P);for (int j = S; j <= E; j++){addEdge(i, j + N, 1);//addEdge(j + N, 500 + N + 1, M);vis[j + N] = true;}sum += P;}for (int i = N + 1; i <= N + 500; i++)if (vis[i])addEdge(i, N + 500 + 1, M);for (; bfs(N + 500 + 1);){memset(cur, 0, sizeof cur);int temp;for (; temp = dfs(0, N + 500 + 1, INF);)flow += temp;//cout << flow;}printf("Case %d: %s\n\n", cnt, flow == sum ? "Yes" : "No");}return 0;
}

轉載于:https://www.cnblogs.com/CrossingOver/p/10704876.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/449626.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/449626.shtml
英文地址,請注明出處:http://en.pswp.cn/news/449626.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MariaDB安裝1,2

2019獨角獸企業重金招聘Python工程師標準>>> 4.22 MariaDB安裝 MariaDB是MySQL的一個分支。MySQL——>sun——>Oracle&#xff0c;維基百科&#xff1a;https://en.wikipedia.org/wiki/MariaDB 官網&#xff1a;https://mariadb.org MariaDB 10.3.11Linux64位…

CentOS 7 上 Docker 安裝

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 Docker支持以下的CentOS版本&#xff1a; CentOS 7 (64-bit)CentOS 6.5 (64-bit) 或更高的版本前提條件 目前&#xff0c;CentOS 僅發…

python畫圖(散點圖,折線圖)

判斷小數點幾位 先將浮點數轉化為字符串&#xff0c;然后截取小數點右邊的字符&#xff0c;在使用len函數。 x3.25 len(str(x).split(".")[1]) 繪制散點圖 #需導入要用到的庫文件 import numpy as np # 數組相關的庫 import matplotlib.pyplot as plt # 繪圖庫 N …

pyqt 不規則形狀窗口顯示

#codingutf-8 import sys from PyQt5.QtCore import Qt from PyQt5.QtWidgets import QWidget, QApplication from PyQt5.QtGui import QPixmap, QPainter, QBitmap, QCursor import PyQt5.QtCore as QtCoreclass PixWindow(QWidget): # 不規則窗體def __init__(self):super()…

【英語-劉曉艷-詞匯】詞匯06

【第一部分&#xff1a;回顧前 5 節單詞】 【第二部分&#xff1a;新單詞】 A. vivid 補充&#xff1a;viv 生存 revive     survive &#xff08;sur surface&#xff0c;surpass &#xff09; B. bright 20. When I read the newspaper, I always read the ___ first. A…

C/C++拾遺錄--關于一個C語言小程序的分析

雖然編了幾年程序&#xff0c;但是對于程序到底是什么規則變成匯編代碼的&#xff0c;在這里搞了一個小程序。用VC查看了一下匯編代碼。在此之前先介紹一下關于函數運行是堆棧變化的細節。 在高級語言編寫程序時&#xff0c;函數的調用是很常見的事情&#xff0c;但是在函數調…

保存tushare所有股票數據,并對漲停進行分析

import tushare as ts import pandas as pd import time import os import datetime # 指定自己要存放文件的絕對路徑 os.chdir(E:/) pd.set_option(expand_frame_repr, False) now_time datetime.date.today() # 從tushare獲取指定日期 def get_today_all_ts(date):date_now …

重命名 docker 容器名

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 docker 容器&#xff08;服務&#xff09;重命名只要一個命令就可以&#xff1a;docker rename 原容器名 新容器名 如&#xff1a;

vim編輯器常用命令總結

在命令狀態下對當前行用 &#xff08;連按兩次&#xff09;, 或對多行用n&#xff08;n是自然數&#xff09;表示自動縮進從當前行起的下面n行。你可以試試把代碼縮進任意打亂再用n排版&#xff0c;相當于一般IDE里的code format。使用ggG可對整篇代碼進行排版。 vim 選擇文本&…

java操作elasticsearch實現前綴查詢、wildcard、fuzzy模糊查詢、ids查詢

1、前綴查詢&#xff08;prefix&#xff09; //prefix前綴查詢Testpublic void test15() throws UnknownHostException {//1、指定es集群 cluster.name 是固定的key值&#xff0c;my-application是ES集群的名稱Settings settings Settings.builder().put("cluster.name&…

tushare查看a股是否跌到位

#%%#獲取上證指數歷史行情數據#獲取上證指數歷史行情數據 import tushare as ts import pandas as pd # 設置token&#xff0c;只需要在第一次調用或者token失效時設置 # 設置完成后&#xff0c;之后就不再需要這一個命令了 ts.set_token() pro ts.pro_api() df_daily pro.in…

為什么我要轉載文章?

在csdn上很多年&#xff0c;學習了許多&#xff0c;也教了人許多&#xff0c;但最近&#xff0c;大家發現&#xff0c;我轉載了大量文章&#xff0c;而很少原創文章&#xff0c;真正的有水平且自己一個字一個字敲鍵盤出來的&#xff0c;1000字要三四個小時&#xff0c;如果包含…

Docker 從Dockerfile 構建鏡像 :build 命令的用法

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 Dockerfile 創建完成后&#xff0c;可以使用 docker build 命令根據 Dockerfile 構建一個鏡像。 1. 首先準備好 Dockerfile : 2. 執行構…

(翻譯).NET應用架構

.NET應用架構 Kalyan Bandarupalli著&#xff0c;hystar翻譯 這個系列文章將幫助.NET開發人員與架構師使用最新的.NET技術設計高效的.NET應用。關于應用架構這方面雖然已有很多文章與書籍&#xff0c;但是對于設計人員理解應用設計的最佳的原則與實踐仍然是具有挑戰性的。這篇…

activity idea編寫bpmn流程文件

idea 的bpmn插件支持不好&#xff0c;1、畫流程圖&#xff0c;注意排他網關流程的條件&#xff0c;2、復制一份xml文件出來&#xff0c;頭部替換&#xff1a;<?xml version"1.0" encoding"UTF-8"?> <definitions xmlns"http://www.omg.org…

tushare寫三因子模型

CAPM模型經歷了大量的實證和應用之后&#xff0c;有證據表明&#xff0c;市場風險溢酬并不能充分解釋個別風險資產的收益率。于是很多研究者開始探索其他的因素&#xff0c;比如公司市值、PE、杠桿比例、賬面市值比等。Fama和French兩個人對于各種因素進行了全面的組合分析&…

Duplicate entry ‘XXX‘ for key

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 報錯如題&#xff1a;Duplicate entry XXX for key 意思是說有唯一約束&#xff0c;所以不能重復。 而我的情況是&#xff0c;有兩個表…

list c++template

以一個現成的模板實現了線性表的順序結構實現&#xff0c;VC6.0調試OK 請大家以開源的方式來完善這個算法 &#xff0c;以跟貼方式來添加代碼 請大家往這個下面繼續添加完整的可以運行的線性表的順序結構實現代碼 /* 線性表的順序結構實現&#xff0c;數組C實現法&#xff0c;V…

聊聊composer.lock

composer.lock 即鎖定文件 其中會存在項目中所有的依賴包&#xff0c;方便協同合作時都得到同樣的以來版本 composer install 命令從當前目錄讀取 composer.json 文件&#xff0c;處理依賴關系&#xff0c;并把依賴安裝到 vendor 目錄下。 如果當前目錄下存在 composer.lock 文…

如何保證MongoDB的安全性?

上周寫了個簡短的新聞《MongoDB裸奔&#xff0c;2億國人求職簡歷泄漏&#xff01;》&#xff1a; 根據安全站點HackenProof的報告&#xff0c;由于MongoDB數據庫沒有采取任何安全保護措施&#xff0c;導致共計202,730,434份國人求職簡歷泄漏。然后很多人評論說MongoDB躺槍了。 …