hdu1179最大匹配

来源:互联网 发布:淘宝大学开网店 编辑:程序博客网 时间:2024/06/08 08:39

思路:太模板化了,,,好不习惯QAQ大哭

题目链接

/*****************************************Author      :Crazy_AC(JamesQi)Time        :2015File Name   :*****************************************/// #pragma comment(linker, "/STACK:1024000000,1024000000")#include <iostream>#include <algorithm>#include <iomanip>#include <sstream>#include <string>#include <stack>#include <queue>#include <deque>#include <vector>#include <map>#include <set>#include <stdio.h>#include <string.h>#include <math.h>#include <stdlib.h>#include <limits.h>using namespace std;#define MEM(a,b) memset(a,b,sizeof a)#define pk push_backtemplate<class T> inline T Get_Max(const T&a,const T&b){return a < b?b:a;}template<class T> inline T Get_Min(const T&a,const T&b){return a < b?a:b;}typedef long long ll;typedef pair<int,int> ii;const int inf = 1 << 30;const int INF = 0x3f3f3f3f;const int MOD = 1e9 + 7;const int N = 510;int uN,vN;int gg[N][N];int link[N];bool vis[N];bool Search_P(int u){for (int i = 1;i <= vN;++i){if (gg[u][i] && !vis[i]){vis[i] = true;if (link[i] == -1 || Search_P(link[i])){link[i] = u;return true;}}}return false;}inline int Hungary(){int ret = 0;MEM(link, -1);for (int u = 1;u <= uN;++u){MEM(vis, false);if (Search_P(u)) ret++;}return ret;}int main(){// ios::sync_with_stdio(false);// freopen("in.txt","r",stdin);// freopen("out.txt","w",stdout);while(~scanf("%d",&vN)){scanf("%d",&uN);MEM(gg, 0);int k,v;for (int i = 1;i <= uN;i++){scanf("%d",&k);while(k--){scanf("%d",&v);gg[i][v] = 1;}}printf("%d\n",Hungary());}return 0;}


0 0