題目**
題目是阿里巴巴2023年校園賽題目
source:2011 alibaba-cup campus contest
所以題目裡面有ali。
題目我覺得滿難懂,大概說下題目意思。題目說電腦要處理不同的指令,電腦可以多工執行,也就是說電腦cpu一次可以處理多個任務,題目裡面沒有說,所以可以認為無限大。
電腦每一次處理需要1ns,1納秒。有些任務比較特殊,每個測試樣例先輸入n,m。
n代表任務的個數,編號從0-n-1,m代表指令,也是給出一些特殊的任務。每個指令有3個數字,成為a,b,c,代表a執行以後才能執行b,且中間間隔必須超過c。
也就是說,不同的任務之間有個先後次序,執行完一些任務以後再繼續執行另外一些任務。且兩個任務之間有時間間隔。
先後次序這一點,滿足拓撲排序的前提。
邊有權值,且要輸出最長時間,那麼就是關鍵路徑。
這一道題目主要考這兩個,但題目比較簡單,不需要用到關鍵路徑的演算法。用最短路徑的思想來做最長路徑也可以。
解題的思路就是拓撲排序一下,在拓撲排序過程中,用cost陣列來記錄到這個節點的最長路徑,然後一直迴圈下去,到最後在遍歷一遍cost陣列就可以找到最大值
拓撲排序裡面初始化cost陣列,要初始化1,把沒有要求的任務都安排到第一輪執行。
也就是開始所有入度為0的點都安排在第一輪執行。在執行有要求的任務。
#include#include#include#include#include#include#include#define maxn 1005
using namespace std;
int n,m,ans;
int deg[maxn],cost[maxn],edge[maxn][maxn];
void init()//初始化操作
void topsort()//拓撲排序
{ int i,j,k;
for(i=0;i
hdu 2145 最短路 排序)
思路 題目很簡單。關鍵是思想,如果你建圖求的是每個點到終點的最短距離,那就tle了,但仔細一想,我也可以建反向圖啊!然後一次dijkstra或者spfa就可以了。最後排序即可。1 include2 include3 include4 include5 const int maxn 333 6 con...
離散化 拓撲排序 最短路堆優化
資料範圍太大,自身無法作為陣列的下標儲存對應的屬性,當資料至於他們之間的相對大小有關,而與具體值無關時,則可以進行離散化。做法 不改變資料相對大小的前提下,對資料進行縮小 struct node a 100001 從小到大排序 b 100001 for i 1 i n i b a i order i...
最短路 拓撲排序 dp NOIP 2017 逛公園
讓我們一起來 forever shi神犇 題意 給你乙個n nn個點m mm條邊的有向帶權圖,設1 11號點到n nn號點的最短路是dis disdi s,給你乙個k k 50 k k 50 k k 5 0 求所有1 11到n nn的路徑中長度不超過dis k dis k dis k的數量。題解 顯...