首页 > 代码库 > hdu 1500
hdu 1500
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | 题意:有两台机器A和B以及N个需要运行的任务。每台机器有M种不同的模式,而每个任务都恰好在一台机器上运行。如果它在机器A上运行,则机器A需要设置为模式xi,如果它在机器B上运行,则机器A需要设置为模式yi。<br>每台机器上的任务可以按照任意顺序执行,但是每台机器每转换一次模式需要重启一次。请合理为每个任务安排一台机器并合理安排顺序,使得机器重启次数尽量少。<br>最小点覆盖 没说的<br>#include<iostream> #include<cstring> using namespace std; int n,m,k; int map[111][111]; int vis[111]; int fa[111]; int dfs( int x) { for ( int i=1;i<=m;i++) { if (map[x][i]&&vis[i]==-1) { vis[i]=1; if (fa[i]==-1||dfs(fa[i])) { fa[i]=x; return 1; } } } return 0; } int main() { int i,job,u,v; while ( scanf ( "%d" ,&n)!=EOF) { if (n==0) break ; scanf ( "%d%d" ,&m,&k); memset (map,0, sizeof (map)); for (i=1;i<=k;i++) { scanf ( "%d%d%d" ,&job,&u,&v); // map[v][u]=1; map[u][v]=1; } memset (vis,-1, sizeof (vis)); memset (fa,-1, sizeof (fa)); int sum=0; for (i=1;i<=n;i++) { memset (vis,-1, sizeof (vis)); sum+=dfs(i); } printf ( "%d\n" ,sum); } return 0; } |
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。