首页 > 代码库 > Asteroids
Asteroids
点击打开链接
题意:某人想实现太空旅行,可以通过空洞实现,而它们的连通方式就是一张n * n的矩阵;现在有一种武器,可以一次性消灭它的一行或者一列(意思就是相当于留下一条可行路)。
解析:利用匈牙利算法实现,二分图匹配
#include<iostream> #include<cstring> #include<cstdio>> using namespace std; const int maxn = 1005; int mapp[ maxn ][ maxn ], vis[ maxn ], cx[ maxn ], cy[ maxn ]; int n, m, nx, ny; int Path( int u ){ ny = n; for( int v = 1; v <= ny; ++v ){ if( mapp[ u ][ v ] && !vis[ v ] ){ vis[ v ] = 1; if( cy[ v ] == -1 || Path( cy[ v ] ) ){ cx[ u ] = v; cy[ v ] = u; return 1; } } } return 0; } int main(){ while( scanf( "%d%d", &n, &m ) != EOF ){ int x, y; memset( mapp, 0, sizeof( mapp ) ); memset( cx, -1, sizeof( cx ) ); memset( cy, -1, sizeof( cy ) ); for( int i = 0; i < m; ++i ){ scanf( "%d%d", &x, &y ); mapp[ x ][ y ] = 1; } nx = n; int ans = 0; for( int i = 1; i <= nx; ++i ){ memset( vis, 0, sizeof( vis ) ); if( cx[ i ] == -1 ){ ans += Path( i ); } } printf( "%d\n", ans ); } return 0; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。