hdu 1179 匈牙利算法

来源:互联网 发布:淘宝网电子管功放机 编辑:程序博客网 时间:2024/05/29 10:10
#include<iostream>#include<cstring>#include<cstdio>#include<cmath>#include<algorithm>#include<cstdlib>#include<map>#include<queue>#include<deque>#include<list>#include<ctime>#include<stack>#include<vector>#include<iomanip>#include<set>#include<bitset>#include<cassert>using namespace std;#define Maxn 1024#define modtypedef long long ll;typedef pair<int, int> PII;#define FOR(i,j,n) for(int i=j;i<=n;i++)#define DFR(i,j,k) for(int i=j;i>=k;--i)#define lowbit(a) a&-a#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define mem(a) memset(a,0,sizeof(a))#define eps 1e-9#define PB push_back#define MP make_pair#define AA first#define BB second#define SZ size()#define BG begin()#define OP begin()#define ED end()#define SQ(x) ((x)*(x))const int inf = 0x7f7f7f7f;const double pi = acos(-1.0);int e[Maxn][Maxn];int book[Maxn],match[Maxn];int n,m;int DFS(int u){   FOR(i,1,n)    { if(e[u][i]&&!book[i])        {book[i]=1;            if(!match[i]||DFS(match[i]))            {   match[i]=u;                return 1;            }        }    }    return 0;}int main(){   while(~scanf("%d%d",&n,&m))    {   mem(e);        FOR(i,1,m)        {   int w;            scanf("%d",&w);            while(w--)            {   int p;                scanf("%d",&p);                e[i][p]=1;            }        }        mem(match);        int sum=0;        FOR(i,1,m)        {            mem(book);            if(DFS(i))sum++;        }        cout<<sum<<endl;    }    return 0;}

0 0
原创粉丝点击