小翟為了完成一篇**,一共要抄襲n篇文章。其中第i篇文章需要a[i]的時間去完成。小翟可以發動粉絲同時抄襲多篇文章,但存在一些文章,只有當它的若干個前置文章抄襲完成後,才能開始抄襲該文章。同時我們認為小翟和其粉絲在一篇文章的前置文章都完成後,能馬上開始抄襲該文章。為了讓小翟盡快完成**,獲得博士學位,在最優的情況下,小翟的**什麼時候可以完成?
小翟雖然不知道知網,但是他想知道在保證**盡快完成的情況下(即保證上題答案不變情況),每篇文章最早什麼時候可以開始抄襲,和最晚什麼時候可以開始抄襲。設第i篇文章最早可以抄襲的時間為f[i];在不影響**完成時間前提下,第i篇文章最晚可以抄襲的時間為g[i]. 請你回答∏i=0-n (g[i]-f[i]+10) 除以10^9+7所得的餘數,題目保證有解。
第一行輸入乙個整數n,m
第二行輸入n個正整數,a1,a2,…,an描述每篇文章抄襲所需要的時間。
接下來讀入m行,每行讀入兩個整數u,v,表示編號為u的文章是編號為v文章的前置文章
所有的輸入資料都滿足1<=n<=5*105,1<=m<=106,1<=a[i]<=10^6
第一行輸出乙個整數表示**最早完成時間。
第二行輸出乙個整數表示∏i=0-n (g[i]-f[i]+10) 除以10^9+7所得的餘數
8 911 17 16 20 14 12 13 15
1 32 4
4 33 6
5 62 5
6 85 7
7 880
459599979
∏i=0-n 為i從0到n的累乘符號
拓撲排序,關鍵路徑,反向計算最長可能結果。
因為只有題目沒有oj 通過了樣例不確定**是不是對的。
僅為儲存**,**思路僅供參考
#include #include #include #include #define max 1000000007
#define inf 0x3fffffff
using namespace std;
int n,m;
int indegree[50050]=;//入度
int outdegree[50050]=;//出度
int tcin[50050];//耗時
vectorg[50050];//正向
vectorrg[50050];//反向
int tm[50050];//最短時間
int tm2[50050];//最長時間
int pre[50050];//關鍵路徑的前驅
bool vis[50050];
//vectortoporder;
int checkvis(int v)
for(int i=1;i<=n;i++)
}while(!q.empty())
}while(!q.empty())}}
}int findlast()
}return ans;
}int main()
int a,b;
for(int i=0;itoplogicalsort();
int e=findlast();
calmx(e);
long long sum=1;
for(int i=1;i<=n;i++)
printf("%d\n%lld\n",tm[e],sum);
return 0;
// for(int i=1;i<=n;i++)
// printf("toporder:");
// for(int i=0;i// cout/ for(int i=1;i<=n;i++) printf("pre:%d:%d\n",i,pre[i]);
// cout/ printf("%d",3459600000%max);
}
關於折騰群入群的那些事
原文 關於折騰群入群的那些事 如果你想走得快。那麼你就乙個人走 如果你想走得遠。那麼就一起走。我認同上面這句話中樸素的道理,所以想拉乙個小群,把喜歡折騰,有趣有聊的朋友聚集在一起。畢竟這個群體很小,有空有緣在一起的人就更少了。群裡的同學能夠即時討論 幫助彼此,堅定繼續折騰的信念,難道不是一件很有價值...
群及置換群的概念
bolg 設g為乙個元素的集合,稱g內的元素為元,為針對g這個集合的元素的運算,當 g g,滿足以下要求的時候,我們稱 g g,為群封閉性 g內的任何兩個元的 運算的結果仍在g內 交換律 a b c a b c a b c a b c 單位元 任何a e a a e a 逆元 a a 1 ea a ...
迴圈群的子群是迴圈群
迴圈群的子群是迴圈群.證明 m 階迴圈群都與 mathbb m,m geq 1 同構,無限階迴圈群都與 mathbb,同構,所以我們只要討論 mathbb m,和 mathbb,就足夠了.對於 mathbb m,來說,當 m 1 時,mathbb m,0,其子群就是 當然是迴圈群.當 m 1 時,設...