题意:

给定n个点的有向图问,问能不能找到若干个环,让所有点都在环中,且让权值最小,KM算法求最佳完美匹配,只不过是最小值,所以把边权变成负值,输出时将ans取负即可

这道题是在VJ上交的

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std; const int maxn = + ;
const int inf = 0x3f3f3f3f;
bool visr[maxn], visl[maxn];
int n, delta, w[maxn][maxn], lx[maxn], ly[maxn], lft[maxn];
inline bool match( int x ){
visl[x] = ;
for( int y=; y<=n; y++ )
if( lx[x]+ly[y]==w[x][y] && !visr[y] ){
visr[y] = ;
if( !lft[y] || match(lft[y]) ){
lft[y] = x;
return ;
}
}
return ;
} inline void update(){
for( int i=; i<=n; i++ ) if( visl[i] )
for( int j=; j<=n; j++ ) if( !visr[j] )
delta = min( delta, lx[i]+ly[j]-w[i][j] );
for( int i=; i<=n; i++ ){
if( visl[i] ) lx[i] -= delta;
if( visr[i] ) ly[i] += delta;
}
} inline int KM(){
for( int i=; i<=n; i++ ){
lft[i] = ly[i] = ;
lx[i] = -inf;
for( int j=; j<=n; j++ )
lx[i] = max(lx[i], w[i][j]);
}
for( int i=; i<=n; i++ ){
while(){
delta = inf;
memset( visr, , sizeof(visr) );
memset( visl, , sizeof(visl) );
if( match(i) ) break;
update();
}
}
int res = ;
for( int i=; i<=n; i++ ) res += w[lft[i]][i];
return res;
} int main(){
// freopen("in.txt", "r", stdin);
while( ~scanf("%d", &n) && n ){
for( int i=; i<=n; i++ )
for( int j=; j<=n; j++ ) w[i][j] = -inf; //不能使用memset( w, -inf, sizeof(w) );
for( int i=; i<=n; i++ ){
int j;
while( ~scanf("%d", &j) && j ){
int d;
scanf("%d", &d);
w[i][j] = max( -d, w[i][j] );
}
}
int ans = KM();
if( -ans>=inf ) puts("N");
else printf("%d\n", -ans);
} return ;
}

最新文章

  1. isKindOfClass,isMemberOfClass
  2. cocos2dx中常见设计模式
  3. PHP多种形式发送邮件
  4. SQL 替换指定列中的指定字符串
  5. mvc-2事件监听
  6. iOS开发 - 网络数据安全加密(MD5)
  7. UVa 11916 (离散对数) Emoogle Grid
  8. Android 使用BaseAdapter 插入不同类型数据
  9. mvc 4 Razor (@html.xx)语法大全以及应用
  10. PHP5.6.x的新鲜事
  11. 【POJ3691】 DNA repair (AC自动机+DP)
  12. Fastify 系列教程二 (中间件、钩子函数和装饰器)
  13. iOS MVVM架构总结
  14. RequireJS - 个人小入门
  15. maven历史版本下载地址
  16. ubuntu下定时任务的执行
  17. puppeteer新手遇到的坑
  18. aliyun添加数据盘后的物理分区和lvm逻辑卷两种挂载方式
  19. linux(mac) 编译安装MySQL
  20. 2.3.3 Button(按钮)与ImageButton(图像按钮)

热门文章

  1. [转]System Verilog的概念以及与verilog的对比
  2. XLNet and Robertra
  3. redis相关文章
  4. Dockerfile HEALTHCHECK健康检查
  5. 1.2 lvm镜像卷
  6. Java基础教程(26)--反射
  7. 解决clover配置文件conf.plist中nv_disable=1或者nvda_drv=1不生效或者说不能删除的问题
  8. pytest_命令行传参
  9. python_封装redis_list方法
  10. 关于MVC接收Ajax调用无法访问的问题