最小权值环覆盖问题:用几个环把所有点覆盖,求所选取的边最小的权值之和。

拆点思想+求最小转求最大+KM算法

#include <cstdlib>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <fstream>
#include <iostream>
#define rep(i, l, r) for(int i=l; i<=r; i++)
#define clr(x, c) memset(x, c, sizeof(x))
#define N 123
#define MAX 1<<30
#define ll long long
using namespace std;
int read()
{
int x=0, f=1; char ch=getchar();
while (ch<'0' || ch>'9') { if (ch=='-') f=-1; ch=getchar(); }
while (ch>='0' && ch<='9') { x=x*10+ch-'0'; ch=getchar(); }
return x*f;
}
int n, m, l[N], st[N], lx[N], ly[N], v[N][N];
bool vx[N], vy[N]; bool Find(int x)
{
vx[x]=1;
rep(y, 1, n) if (!vy[y])
{
int a=lx[x]+ly[y]-v[x][y];
if (!a)
{
vy[y]=1; if (!l[y] || Find(l[y])) { l[y]=x; return true; }
}
else st[y]=min(st[y], a);
}
return false;
} int km()
{
rep(i, 1, n) lx[i]=-MAX; clr(ly, 0); clr(l, 0);
rep(i, 1, n) rep(j, 1, n) if (lx[i]<v[i][j]) lx[i]=v[i][j];
rep(i, 1, n)
{
rep(j, 1, n) st[j]=MAX;
while (1)
{
clr(vx, 0); clr(vy, 0);
if (Find(i)) break; int a=MAX;
rep(j, 1, n) if (!vy[j] && st[j]<a) a=st[j];
rep(j, 1, n) if (vx[j]) lx[j]-=a;
rep(j, 1, n) if (vy[j]) ly[j]+=a; else st[j]-=a;
}
}
int ans=0;
rep(i, 1, n) if (!l[i] || v[l[i]][i]==-MAX) return -1; else ans+=v[l[i]][i];
return -ans;
} int main()
{
while (~scanf("%d%d", &n, &m))
{
rep(i, 1, n) rep(j, 1, n) v[i][j]=MAX;
rep(i, 1, m) { int x=read(), y=read(), z=read(); if (v[x][y]>z) v[x][y]=z; }
rep(i, 1, n) rep(j, 1, n) v[i][j]*=-1;
printf("%d\n", km());
}
return 0;
}

  

最新文章

  1. 基于Caffe的DeepID2实现(上)
  2. C#多线程之基础篇1
  3. Code Review 五问五答
  4. EXCL poi导入
  5. Robot Motion 分类: POJ 2015-06-29 13:45 11人阅读 评论(0) 收藏
  6. .NET判断某一年的所有放假的日期
  7. 函数buf_read_page
  8. x86、i386、i486、i586、i686和x86_64
  9. 终极二分查找--传说十个人写九个有bug
  10. [Head First Python]5. 推导数据:处理数据
  11. Task的异步模式
  12. #pragma mark指令的作用
  13. 阿里云 RDS for MySQL支持什么引擎
  14. excel 用VBA将所有单元格内容全部转换为文本
  15. HTML5 学习01——浏览器问题、新元素
  16. maybe i have no answer
  17. Python配置tab自动补全功能
  18. llvm code call graph
  19. python 之 python3内置函数
  20. CF245H Queries for Number of Palindromes

热门文章

  1. UVA 1600 Patrol Robert 巡逻机器人 (启发搜索BFS)
  2. css设置禁止文字被选中
  3. CPP-网络/通信:用CMarkup类操纵XML
  4. Bootstrap 标签
  5. HTML5&lt;section&gt;元素
  6. POP简单动画简单使用 (入门级别)
  7. javascript (六)DOM
  8. 控件中添加的成员变量value和control的区别
  9. 【上下界网络流 二分】bzoj2406: 矩阵
  10. Voyager的路由