hdu-2819 Swap (二分匹配)

来源:互联网 发布:网盘软件 编辑:程序博客网 时间:2024/05/22 14:17


题目链锁:http://acm.hdu.edu.cn/showproblem.php?pid=2819


#include<iostream>#include<cstring>#include<string>#include<cstdio>#include<stdio.h>#include<algorithm>#include<cmath>#include<set>#include<map>#include<queue>#include<vector>using namespace std;#define inf 0x3f3f3f3f#define eps 1e-9#define mod 1000000007#define FOR(i,s,t) for(int i = s; i < t; ++i )#define REP(i,s,t) for( int i = s; i <= t; ++i )#define LL long long#define ULL unsigned long long#define pii pair<int,int>#define MP make_pair#define lson id << 1 , l , m#define rson id << 1 | 1 , m + 1 , r #define maxn ( 100+10 )#define maxe ( 50000+10 )vector< int > G[maxn];int link[maxn];bool vis[maxn];int n;bool dfs ( int u ) {    for( int i = 0; i < G[u].size(); ++i ) {        int v = G[u][i];        if( !vis[v] ) {            vis[v] = 1;            if( link[v] == -1 || dfs ( link[v] ) ) {                link[v] = u;                return 1;            }        }    }    return 0;}int hungary () {    memset( link, -1, sizeof( link ) );    int res = 0;    for( int i = 1; i <= n; ++i ) {        memset( vis, 0, sizeof( vis ) );        if( dfs ( i ) ) ++res;    }    return res;}int ll[maxn], rr[maxn];int main () {    while( ~scanf("%d", &n ) ){        int x;        for( int i = 1; i <= n; ++i )            G[i].clear();        for( int i = 1; i <= n; ++i )            for( int j = 1; j <= n; ++j ) {                scanf("%d", &x );                if( x ) G[i].push_back( j );            }        int ans = hungary( );        if( ans < n ) {            puts("-1");            continue;        }        ans = 0;        for( int i = 1; i <= n; ++i ) {            int v ;            for( v = 1; v <= n; ++v )                if( link[v] == i ) break;            if( v == i ) continue;            ll[ans] = i, rr[ans++] = v;            swap( link[v], link[i] ); // 注意交换列之后link也要更新        }        printf("%d\n", ans );        for( int i = 0; i < ans; ++i )            printf("C %d %d\n", ll[i], rr[i] );    }}

0 0
原创粉丝点击