首先圖論(線段交叉),最小路徑覆蓋。。。。談談對最小路徑覆蓋核心函式的理解:每次從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...