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

hdu 1150 最小点覆盖

时间:2015-03-05 00:02:19      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:

题目大意;有两台机器A和B以及N个需要运行的任务。每台机器有M种不同的模式,而每个任务都恰好在一台机器上运行。如果它在机器A上运行,则机器A需要设置为模式xi,如果它在机器B上运行,则机器A需要设置为模式yi。每台机器上的任务可以按照任意顺序执行,但是每台机器每转换一次模式需要重启一次。请合理为每个任务安排一台机器并合理安排顺序,使得机器重启次数尽量少。
 
注意状态为0的即可
 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<cstring>
 4 using namespace std;
 5 const int MAXN = 510;
 6 int uN,vN;//u,v的数目,使用前面必须赋值
 7 int g[MAXN][MAXN];//邻接矩阵
 8 int linker[MAXN];
 9 bool used[MAXN];
10 bool dfs(int u)
11 {
12     for(int v = 0; v < vN;v++)
13     if(g[u][v] && !used[v])
14     {
15         used[v] = true;
16         if(linker[v] == -1 || dfs(linker[v]))
17         {
18             linker[v] = u;
19             return true;
20         }
21     }
22     return false;
23 }
24 int hungary()
25 {
26     int res = 0;
27     memset(linker,-1,sizeof(linker));
28     for(int u = 0;u < uN;u++)
29     {
30         memset(used,false,sizeof(used));
31         if(dfs(u))res++;
32     }
33     return res;
34 }
35 int main()
36 {
37     int i,j,k;
38     //freopen("1.in","r",stdin);
39     while(scanf("%d",&uN)!=EOF)
40     {
41         if(uN==0)   break;
42         scanf("%d%d",&vN,&k);
43         int p,q;
44         memset(g,0,sizeof(g));
45         while(k--)
46         {
47             scanf("%d%d%d",&i,&p,&q);
48             if(p>0&&q>0)    g[p][q]=1;
49         }
50         printf("%d\n",hungary());
51     }
52     return 0;
53 }

 

hdu 1150 最小点覆盖

标签:

原文地址:http://www.cnblogs.com/cnblogs321114287/p/4314590.html

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