首页 > 代码库 > 全局最小割模版 n^3
全局最小割模版 n^3
//点标从0-n-1, 开始时先init 复杂度n^3 //对于边(u,v,flow): //g[u][v]+=flow; //g[v][u]+=flow; typedef long long ll; const int N = 305; const ll inf = 1e18; ll g[N][N], w[N]; int a[N], v[N], na[N]; ll mincut(int n) { int i, j, pv, zj; ll best = inf; for(i = 0; i < n; i ++) v[i] = i; while(n > 1) { for(a[v[0]] = 1, i = 1; i < n; i ++) { a[v[i]] = 0; na[i-1] = i; w[i] = g[v[0]][v[i]]; } for(pv = v[0], i = 1; i < n; i ++) { for(zj = -1, j = 1; j < n; j ++) if(!a[v[j]] && (zj < 0 || w[j] > w[zj])) zj = j; a[v[zj]] = 1; if(i == n-1) { if(best > w[zj]) best = w[zj]; for(i = 0; i < n; i ++) { g[v[i]][pv] = g[pv][v[i]] += g[v[zj]][v[i]]; } v[zj] = v[--n]; break; } pv = v[zj]; for(j = 1; j < n; j ++) if(!a[v[j]]) w[j] += g[v[zj]][v[j]]; } } return best; } void init(int n){ for(int i = 0; i < n; i ++) for(int j = 0; j < n; j ++) g[i][j] = g[j][i] = 0; }
全局最小割模版 n^3
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。