码迷,mamicode.com
首页 > 其他好文 > 详细

POJ 1469

时间:2015-06-09 15:36:57      阅读:85      评论:0      收藏:0      [点我收藏+]

标签:

 1 #include<iostream>
 2 #include<stdio.h>
 3 #include <string.h>
 4 #include <vector>
 5 #define MAXN 300
 6 #define _clr(x) memset(x,0xff,sizeof(int)*MAXN)
 7 using namespace std;
 8 
 9 int hungary(int m,int n,int mat[][MAXN],int* match1,int* match2);
10 int _m[101][300];
11 int match1[MAXN];
12 int match2[MAXN];
13 int main()
14 {
15     //freopen("acm.acm","r",stdin);
16     int M;
17     int N;
18     int n;
19     int i;
20     int j;
21     int ans;
22     int s;
23     int tem;
24     int num;
25     scanf("%d",&num);
26     while(num --)
27     {
28     scanf("%d%d",&M,&N);
29     memset(_m,0,sizeof(_m));
30     for(i = 0; i < M; ++ i)
31     {
32         scanf("%d",&s);
33         for(j = 0; j < s; ++ j)
34         {
35                 scanf("%d",&n);
36                 _m[i][n-1] = 1;
37         }
38     }
39         ans = hungary(M,N,_m,match1,match2);
40         if(ans == M)
41             printf("YES\n");
42         else
43             printf("NO\n");
44     }
45 }
46 
47 
48 int hungary(int m,int n,int mat[][MAXN],int * match1,int* match2){
49     int s[MAXN],t[MAXN],p,q,ret=0,i,j,k;
50     for (_clr(match1),_clr(match2),i=0;i<m;ret+=(match1[i++]>=0))
51         for (_clr(t),s[p=q=0]=i;p<=q&&match1[i]<0;p++)
52             for (k=s[p],j=0;j<n&&match1[i]<0;j++)
53                 if (mat[k][j]&&t[j]<0){
54                     s[++q]=match2[j],t[j]=k;
55                     if (s[q]<0)
56                         for (p=j;p>=0;j=p)
57                             match2[j]=k=t[j],p=match1[k],match1[k]=j;
58                 }
59     return ret;
60 }

 

POJ 1469

标签:

原文地址:http://www.cnblogs.com/gavinsp/p/4563402.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!