題意:有n個人m條邊,每條邊有乙個u,v,代表u的年齡大於等於v,現在要將這n個人分成x個組,組內的人的年齡不能夠直接或者間接比較,問最少可以分成多少組。
思路:一開始沒看清題意,直接拓撲排序做了。後來聽師兄說會有環,年齡大於等於,如果有環代表這裡面的年齡相等,那麼環裡面的人都是每個人一組,縮完點之後那個點的長度就是點的人數,然後用dp最長路做。
1 #include 2 #include 3 #include 4 #include 5 #include6 #include 7 #include 8 #include 9 #include 10 #include
11 #include 12
using
namespace
std;
13#define inf 0x3f3f3f3f
14#define n 100010
15struct
edge edge[n*3], edg[n*3
];18
intcnt[n], dp[n], head[n], hea[n], tott, tot, tim, vis[n], deg[n], dfn[n], low[n], belong[n], num;
19 stacksta;
2021
void add(int u, int
v) 24
25void add(int u, int
v) 28
29void tarjan(int
u) else
if(vis[e.v] && dfn[e.v] < low[u]) low[u] =dfn[e.v];38}
39if(low[u] ==dfn[u]) 48}
49}5051
int dfs(int
u) 58
return dp[u] =ans;59}
6061
intmain()
74for(int i = 1; i <= n; i++)
75if(!dfn[i]) tarjan(i);
76for(int u = 1; u <= n; u++) 82}
83}84int ans = 0;85
for(int i = 1; i <= num; i++)
86 ans =max(ans, dfs(i));
87 printf("
%d\n
", ans);88}
89return0;
90 }
ZOJ 3795 Grouping 解題報告
強連通分量縮點 dp優化求關鍵路徑題。題意 浙大有n個人,他們的年齡都不知道。我們有一些有關他們年齡的資訊。第i個資訊表示si的年齡不小於ti。現在我們要把這n個人分成若干個組。要求每個組中的任意兩個人都不能被直接或者間接的比較出年齡的大小關係。求最少可以把這n個人分成多少個組。我的解題思路 首先該...
luogu P3795 鍾氏對映(遞推)
也就是給n個點,把他們乙個分為一組,或兩個分為一組,有多少種方法。空間大點隨便做。我們靠遞推。乙個新點,要不自己一組,要不和前面的乙個點構成一組。所以f 0 f 1 1 f i f i 1 f i 2 i 1 就行了 1 include2 include3 include4 include5 inc...
洛谷 P3795 鍾氏對映
2233年,cssyz學校的數學老師兼數學競賽顧問鐘jg已經2200 歲啦!為了慶生,他或她給廣大人民群眾出了道題。設集合n m 設 ff 為 nn 到 mm 的對映。求滿足 f f x x 的不同的對映 ff 的個數,由於答案較大,輸出答案對 14233333取餘的數即可。輸入格式 輸入乙個正整數...