某考研群的入群試題

2021-09-26 15:44:30 字數 1903 閱讀 9715

小翟為了完成一篇**,一共要抄襲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

// cout

}

關於折騰群入群的那些事

原文 關於折騰群入群的那些事 如果你想走得快。那麼你就乙個人走 如果你想走得遠。那麼就一起走。我認同上面這句話中樸素的道理,所以想拉乙個小群,把喜歡折騰,有趣有聊的朋友聚集在一起。畢竟這個群體很小,有空有緣在一起的人就更少了。群裡的同學能夠即時討論 幫助彼此,堅定繼續折騰的信念,難道不是一件很有價值...

群及置換群的概念

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 時,設...