總結(18.5.28)
今天寫了幾個差分約束的題目,這些題目大都非常簡單,只要找對大小比較的關系,確定應該用最短路來寫還是最長路寫,需不需要虛擬節點,接下來再根據個人習慣用dfs或bfs寫個求最短路的模板,差不多就可以了(如果是區間的話,可以用前綴和考慮大小關系)。以洛谷P1260工程規劃一題為例子:
/**
題目描述
造一幢大樓是一項艱巨的工程,它是由n個子任務構成的,給它們分別編號1,2,…,n(5≤n≤1000)。由於對一些任務的起始條件有著嚴格的限制,所以每個任務的起始時間T1,T2,…,Tn並不是很容易確定的(但這些起始時間都是非負整數,因為它們必須在整個工程開始後啟動)。例如:挖掘完成後,緊接著就要打地基;但是混凝土澆築完成後,卻要等待一段時間再去掉模板。
這種要求就可以用M(5≤m≤5000)個不等式表示,不等式形如Ti-Tj≤b代表i和j的起始時間必須滿足的條件。每個不等式的右邊都是一個常數b,這些常數可能不相同,但是它們都在區間(-100,100)內。
你的任務就是寫一個程序,給定像上面那樣的不等式,找出一種可能的起始時間序列T1,T2,…,Tn,或者判斷問題無解。對於有解的情況,要使最早進行的那個任務和整個工程的起始時間相同,也就是說,T1,T2,…,Tn中至少有一個為0。
輸入輸出格式
輸入格式:
第一行是用空格隔開的兩個正整數n和m,下面的m行每行有三個用空格隔開的整數i,j,b對應著不等式Ti-Tj≤b。
輸出格式:
如果有可行的方案,那麽輸出N行,每行都有一個非負整數且至少有一個為0,按順序表示每個任務的起始時間。如果沒有可行的方案,就輸出信息“NO SOLUTION”。
分析:
這一題首先根據題意可以知道是個差分約束的模板題,因為有不可行的方案,所以需要判斷負環,然後題目說“每行都有一個非負整數且至少有一個為0”,所以輸出的答案都加上一個最小值就可以了。
**/
小結:
總而言之,差分約束的題目了解的差不多了,解法也很簡單,只是有時候想不到原來這麽簡單,只要想到思路,就要很快的能用代碼實現,思路清晰很重要模板背熟很重要。
-------5月28日
總結(18.5.28)