ZOJ 3795 Grouping 解題報告

2021-06-27 14:09:31 字數 1154 閱讀 2553

強連通分量縮點+dp優化求關鍵路徑題。題意:浙大有n個人,他們的年齡都不知道。我們有一些有關他們年齡的資訊。第i個資訊表示si的年齡不小於ti。現在我們要把這n個人分成若干個組。要求每個組中的任意兩個人都不能被直接或者間接的比較出年齡的大小關係。求最少可以把這n個人分成多少個組。

我的解題思路:首先該圖為有向圖,將人看做點,年齡關係看做邊。同乙個強連通分量裡面的任意兩點都不能被分到乙個組裡,因為很明顯任意兩點之間的大小關係都可以比較出來。將強連通分量縮點成強連通分量圖後每乙個強連通分量的點權設為該強連通分量的點數。那麼答案就是強連通分量圖中關鍵路徑上的點權之和,這個關鍵路徑其實就是點權最大的一條路徑,或者稱為最長路。很明顯一條路徑中任意兩點都不能被分成一組,因為他們的關係是確定的。比如a大於b,b大於c,a大於d,d大於c,a明顯大於c,但是b與d的大小卻無法比較出來,因此b與d可以被分成同一組。最後就是求這個強連通圖的關鍵路徑上的點權和了。注意:使用裸的dfs是會導致tle的,因為多個路徑的公有部分可能會被搜尋多次,使用dp優化就可以避免了同乙個點被dfs多次。

我的解題**:強連通分量tarjan演算法+縮點+dp優化

#include #include #include #include #include using namespace std;

const int n = 100001;

vector e[n], scce[n];

int dfn[n], low[n];

int stack[n], stop; //手寫棧

bool instack[n];

int timer, sccn; //時間戳與強連通分量個數

int belong[n];

bool vis[n];

int dp[n]; //以當前強連通分量為起點的路徑最大權

int w[n]; //強連通分量權

int n, m;

void initread();

void dataprocess();

void tarjan(int x);

void dfs(int x);

int main()

return 0;

}void initread()

int a, b;

for (int i=0; i

379 完全平方數 BFS

給定正整數 n,找到若干個完全平方數 比如 1,4,9,16,使得它們的和等於 n。你需要讓組成和的完全平方數的個數最少。示例 1 輸入 n 12 輸出 3 解釋 12 4 4 4.示例 2 輸入 n 13 輸出 2 解釋 13 4 9.from collections import deque b...

火影忍者379話最新情報

火影忍者379話情報 從漫畫一開始,佩因的一句話就讓人驚奇。從管子逃走了麼?上一話自來也就得出結論,佩印的視覺只是共享,並沒有具備像白眼一樣近乎360度視角的能力,火影忍者379情報 火影忍者379情報圖 火影忍者379話 火影忍者第379話 但是當時三個人都是背對管子的,怎麼會知道自來也是從管子逃...

RQNOJ PID379 約會計畫 並查集

pid379 約會計畫 題目描述 cc是個超級帥哥,口才又好,rp極高 這句話似乎降rp 又非常的幽默,所以很多mm都跟他關係不錯。然而,最關鍵的是,cc能夠很好的調解各各妹妹間的關係。mm之間的關係及其複雜,cc必須嚴格掌握她們之間的朋友關係,好一起約她們出去,cc要是和不是朋友的兩個mm出去玩,...