強連通 最小路徑覆蓋 hdu 3861

2021-08-07 03:08:34 字數 970 閱讀 3238

題意:有 n 座城市和 m 條有向邊,現在要把這 n 座城市分成一些洲,要求: 如果城市 u,v 之間可以互達則兩座城市要分在乙個洲裡面,

每個洲裡面的任意兩個城市 u,v之間至少需要存在一條邊,問做少能夠分成多少個洲。

先將可以互相到達的點縮點,然後要求用最小的邊將點連線,所以是最小路徑覆蓋問題。

#include#include#include#include#includeusing namespace std;

#define ll long long

#define me(a,b) memset(a,b,sizeof(a))

struct node

e[100005];

int dfn[5005],low[5005],head[5005],scnt[5005],head2[5005],book[5005],f[5005];

int tot,cnt,top,top2;

void add(int u,int v)

node e2[100005];

void add2(int u,int v)

stackq;

int n,m;

int trijan(int x)

else if(!scnt[u])low[x]=min(low[x],dfn[u]);

}if(low[x]==dfn[x])

}}int dfs(int x)}}

return 0;

}int main()

{ int t;

scanf("%d",&t);

while(t--)

{int n,m;

me(head,-1);

me(dfn,0);

me(low,0);

me(scnt,0);

cnt=tot=top=top2=0;

scanf("%d%d",&n,&m);

for(int i=0;i

最小路徑覆蓋問題(最小路徑覆蓋)

本題題目描述可以發現很明顯的最小路徑覆蓋問題,又因為最小路徑覆蓋 節點數 二分圖最大匹配數,所以本題可以用匈牙利演算法求出二分圖最大匹配數,也可以向第一題那樣用網路流模型求出最大匹配數。本題建模時不同在於,每個點要分成兩個點,乙個為起點,乙個為終點,再來求二分圖最大匹配。然後麻煩就在於本題也要輸出路...

hdu 3861 強量通分量 最小路徑覆蓋

有向圖中,路徑覆蓋就是在圖中找一些路徑,使之覆蓋了圖中的所有頂點,且任何乙個頂點有且只有一條路徑與之關聯 如果把這些路徑中的每條路徑從它的起始點走到它的終點,那麼恰好可以經過圖中的每個頂點一次且僅一次 如果不考慮圖中存在迴路,那麼每條路徑就是乙個弱連通子集 對於乙個路徑覆蓋,有如下性質 每個頂點屬於...

hdu1960 最小路徑覆蓋

題意 給你明天的計程車訂單,訂單中包含每個人的起點和終點座標,還有時間,如果一輛計程車想接乙個乘客必須在每個訂單前1分鐘到達,也就是小於等於time 1,問你完成所有訂單要最少多少量計程車.思路 典型的最小路徑覆蓋,對於最小路徑覆蓋,我們可以這麼理解,最次的情況是n輛,而只要找到那麼一組可以與其匹配...