最小路徑覆蓋合集

2021-06-18 02:17:11 字數 2646 閱讀 4443

首先

談談對最小路徑覆蓋核心函式的理解:每次從u出發尋找擴增點,若v已被其他點h擴增,則遞迴令h重新擴增另乙個點,並把v的父節點指向h

int getnext(int u)}}

return 0;

}

圖論(線段交叉),最小路徑覆蓋。。。。

貌似hdu的編譯器有bug

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

#define maxn 310

#define maxm 100000

int n, m, p;

struct node

data[maxn];

int seq[maxn];

double dis[maxn][maxn];

int head[maxn], to[maxm], next[maxm], szedge;

int vis[maxn], fa[maxn];

void add(int u, int v)

int getnext(int u)}}

return 0;

}inline double getdis(int i, int j)

inline int getcross(node &n0, node &n1, node &n2)

int iscross(node a1, node a2, node b1, node b2)

int main()}}

/// 判斷交叉

for (i = 1; i<= cnt ; ++i)}}

}/// floyd

for (i = 1; i<= cnt; ++i)

for (int j = 1; j<= cnt; ++j)

if (dis[j][i] != -1 )

for (int k = 1; k<= cnt; ++k)

if (dis[i][k] != -1)

double l = 0.0, r = 40000.0 , mid;

const double inf = 1e-6;

while (r-l > inf)

if (n-tp <= p) r = mid;

else l = mid;

}printf("%.2lf\n", (l+r)/2.0);

}return 0;

}

匈牙利演算法,但核心與最小路徑覆蓋一致,都是逐漸擴增

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

#define maxn 1005

int fa[maxn], vis[maxn];

struct _node

dm[maxn], dn[maxn];

vectornxt[maxn];

int test ( int i, int j )

if ( a.x + 1 == b.x && a.y == b.y )

if ( a.x == b.x && a.y == b.y + 1 )

if ( a.x + 1 == b.x && a.y == b.y + 1 )

return 0;

}int fnd ( int u )

vis[v] = 1;

if ( fa[v] == -1 || fnd ( fa[v] ) )

}return 0;

}int main()

for ( int i = 0; i < m; ++i )

for ( int i = 0; i < n; ++i )}}

memset ( fa, -1, sizeof fa );

int cnt = 0;

for ( int i = 0; i < n; ++i )

}printf ( "%d\n", n + m - cnt );

}return 0;

}

最小點覆蓋

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

#define maxn 1005

int fa[maxn], vis[maxn];

struct _node

dm[maxn], dn[maxn];

vectornxt[maxn];

int fnd ( int u )

vis[v] = 1;

if ( fa[v] == -1 || fnd ( fa[v] ) )

}return 0;

}int main()

for ( int i = 0, j; i < k; ++i )

memset ( fa, -1, sizeof fa );

int cnt = 0;

for ( int i = 1; i < n; ++i )

}printf ( "%d\n", cnt );

}return 0;

}

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

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

最小路徑覆蓋

zoj 2521 led display 題意 七段數碼顯示器,乙個數碼上的7段燈可以選擇滅掉一些後重複使用這個數碼,但滅掉的段不能再亮了。比如 6 可以 滅掉左小角的一段變成 5 來使用。但自己不能重複使用,即最少滅一段才能再次使用。現在按次序給出 乙個要現實的數碼序列,求需要的最少的燈數,使得能...

最小路徑覆蓋

差不多是模板題了 分析 最小路徑覆蓋 n 最大匹配數 n為 總點數 因為匹配的點 相互 交叉形成一條條最長路徑 剩餘沒匹配的點需要進行就是需要匹配數 及 最小路徑覆蓋數 include using namespace std define maxn 1005 int match maxn int v...