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

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

DAG图的最小路径覆盖数=节点数-最大匹配数

 

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

 

 

 

posted on 2012-04-17 11:08  Qiuqiqiu  阅读(230)  评论(0编辑  收藏  举报