Asteroids

来源:互联网 发布:崔永元 我的抗战 知乎 编辑:程序博客网 时间:2024/05/16 04:18

点击打开链接

题意:某人想实现太空旅行,可以通过空洞实现,而它们的连通方式就是一张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;}


0 0
原创粉丝点击