Qiuqiqiu  
不管道路多么崎岖坎坷,我永远不停下追逐梦想的脚步!

http://acm.hdu.edu.cn/showproblem.php?pid=1150

最小顶点覆盖

View Code
 1 #include <cstdio>
 2 #include <cstring>
 3 using namespace std;
 4 
 5 const int N=150;
 6 int g[N][N],n,m;
 7 int mat[N],vis[N];
 8 bool match(int u)
 9 {
10     for(int v=1;v<m;v++)
11         if(g[u][v] && !vis[v])
12         {
13             vis[v]=1;
14             if(mat[v]==-1 || match(mat[v]))
15             {
16                 mat[v]=u;
17                 return 1;
18             }
19         }
20     return 0;
21 }
22 int maxmatch()
23 {
24     int cnt=0;
25     memset(mat,-1,sizeof(mat));
26     for(int i=1;i<n;i++)
27     {
28         memset(vis,0,sizeof(vis));
29         if(match(i)) cnt++;
30     }
31     return cnt;
32 }
33 int main()
34 {
35     int k;
36     while(scanf("%d%d%d",&n,&m,&k)==3)
37     {
38         memset(g,0,sizeof(g));
39         for(int i=0;i<k;i++)
40         {
41             int u,v,x;
42             scanf("%d%d%d",&x,&u,&v);
43             g[u][v]=1;
44         }
45         int ans=maxmatch();
46         printf("%d\n",ans);
47     }
48     return 0;
49 }

 

posted on 2012-04-17 10:06  Qiuqiqiu  阅读(148)  评论(0编辑  收藏  举报