poj 1274 -- The Perfect Stall (二分图)

来源:互联网 发布:小雀斑银行知乎 编辑:程序博客网 时间:2024/04/28 01:17

小小纪念

# include <cstdio># include <iostream># include <set># include <map># include <vector># include <list># include <queue># include <stack># include <cstring># include <string># include <cstdlib># include <cmath># include <algorithm># define ll long longusing namespace std ;struct Edge {    int v , next ;} g [ 50000 ] ; ;int head [ 210 ] , cnt ;bool vis [ 210 ] ;int n , m , cx [ 210 ] , cy [ 210 ] ;void addedge ( int u , int v ){    g [ cnt ] . v = v ;    g [ cnt ] . next = head [ u ] ;    head [ u ] = cnt ++ ;}bool dfs ( int u ){    for ( int i = head [ u ] ; ~ i ; i = g [ i ] . next ) {        int v = g [ i ] . v ;        if ( ! vis [ v ] ) {            vis [ v ] = 1 ;            if ( cy [ v ] == -1 || dfs ( cy [ v ] ) ) {                cx [ u ] = v ;                cy [ v ] = u ;                return true ;            }        }    }    return false ;}int fuck ( ){    int ans = 0 ;    memset ( cx , -1 , sizeof ( cx ) ) ;    memset ( cy , -1 , sizeof ( cy ) ) ;    for ( int i = 1 ; i <= n ; i ++ ) {        if ( cx [ i ] == -1 ) {            memset ( vis , 0 , sizeof ( vis ) ) ;            ans += dfs ( i ) ;        }    }    return ans ;}int main ( ){    cin . sync_with_stdio ( false ) ;    while ( cin >> n >> m ) {        cnt = 0 ;        memset ( head , -1 , sizeof ( head ) ) ;        for ( int i = 1 ; i <= n ; i ++ ) {            int num ;            cin >> num ;            while ( num -- ) {                int v ;                cin >> v ;                addedge ( i , v ) ;            }        }        cout << fuck ( ) << endl ;    }}


原创粉丝点击