您的位置:首页 > Web前端

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

2013-05-19 14:31 357 查看
小小纪念

# 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 long

using 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 ;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: