目錄兩遍topo排序
**時間複雜度
參考文章
題目傳送門
time limit: 1000 ms把給的例子畫圖畫出來,然後分析memory limit: 256 mb
小h為了完成一篇**,一共要完成n個實驗。其中第i個實驗需要ai的時間去完成。
小h可以同時進行若干實驗,但存在一些實驗,只有當它的若干前置實驗完成時,才能開始進行該實驗。
同時我們認為小h在乙個實驗的前置實驗都完成時,就能馬上開始該實驗。
為了讓小h盡快完成**,需要知道在最優的情況下,最後乙個完成的實驗什麼時候完成?
小h還想知道,在保證最後乙個實驗盡快完成的情況下(即保證上一問的答案不變),他想知道每個實驗最晚可以什麼時候開始。
設第i個實驗最早可能的開始時間為fi,不影響最後乙個實驗完成時間的最晚開始時間為gi,請你回答
除以10^9+7所得的餘數。
題目保證有解。
從標準輸入讀入資料。
第一行輸入乙個整數n,m。
第二行輸入n個正整數,a1,a2,.....an,描述每個實驗完成所需要的時間。
接下來讀入m行,每行讀入兩個整數u,v,表示編號為u的實驗是編號為v的實驗的前置實驗。
對於所有的輸入資料,都滿足1<=n<=10^5,1<=m<=5*10^5,1<=ai<=10^6。
複製輸出到標準輸出。
第一行輸出乙個整數表示最晚完成的實驗的時間。
第二行輸出乙個整數表示除以10^9+7所得的餘數。
複製7 5
11 20 17 10 11 17 17
5 46 1
7 32 4
2 1
3 4
7840
第乙個點最早開始時間為20,最晚開始時間為23。
第二個點最早開始時間為0,最晚開始時間為3。
第三個點最早開始時間為17,最晚開始時間為17。
第四個點最早開始時間為20,最晚開始時間為24。
第五個點最早開始時間為0,最晚開始時間為13。
第六個點最早開始時間為0,最晚開始時間為6。
第七個點最早開始時間為0,最晚開始時間為0。
清華大學2023年機試題
step1
每個實驗u的最早開始時間
step2
然後求最後乙個實驗的最優完成時間
step3
我們反過來思考,現在知道了每個實驗花費的時間,和所有實驗的最晚完成時間,我們只需要求出每個實驗最晚的完成時間,然後減去該實驗所花費的時間,就是該實驗的最晚開始時間
注意:
#include#include#include#include#includeusing namespace std;
typedef long long ll;
const int n = 100010, m = 2*n;
const int mod = 1e9 + 7;
int n, m;
int d[n];// 存每個節點的入度
int res[n], cnt = 0;
//存圖
int h[n], e[m], ne[m], idx = 0;
int timex[n];
int a[n], b[n];
int ans;
int f[n], g[n];
void add(int a, int b)
void topo()
while(q.size())
} }
// 得到最晚完成時間
for(int i = 1; i <= n; i++) ans = max(ans, f[i] + timex[i]);
}void topo2()
while(q.size())
} }}
void init()
int main()
topo(); // 得到ans,f[..]
// 重新反向建圖
init();
for(int i = 0; i < m; i++)
topo2(); // 得到 g[..]
// for(int i = 1; i <= n; i++)
// printf("%d %d\n", f[i], g[i]);
//ll total = 1;
for(int i = 1; i <= n; i++)
total = (total % mod) * ((ll)g[i] - f[i] + 1 % mod) % mod;
printf("%d\n%lld\n", ans, total);
return 0;
}
easyui dialog載入兩遍
以下兩種寫法都會載入並開啟這個dialog,所以如果都寫的話,會載入兩遍,其中有href 屬性時,會傳送兩遍http請求 載入並開啟,如果之前已經載入過屬性 如href等 會再載入一次 比如傳送url請求 dialogdiv dialog open 載入dialog,此時初始化時也會請求href的u...
C結果輸出兩遍
scanf輸入後 換行符還是留在緩衝區中,特別地 scanf c a 會讀取換行符 所以我們在scanf後面應該加上getchar 但是一般情況下scanf只讀取對應的型別 所以不用管 另外 gets 好像也會自動讀取換行符 為避免此類問題 輸入不用單個字元輸入 scanf d c s f a,b,...
好程式需要至少寫兩遍
great code is written twice or more 這篇文章翻譯而來。最近這些年,越來越多的人開始轉向敏捷開發。各種敏捷開發技術並不新鮮,大多是在80和90年代發展形成。但只是在最近這些年,程式設計師和 更重要的是 一些商業顧問,架構師,客戶開始變得喜歡和擁抱敏捷開發。進化中的需...