URAL - 1949 The Best Picture in the Galaxy
2015-08-15 13:59
447 查看
传送门:http://acm.timus.ru/problem.aspx?space=1&num=1949
题意 : k 个学生去看n个电影,每个电影有自己的开始时间,结束时间和女演员数目,并且,要保证一个学生同时不能看两场电影,其次,学生看的第i+1个电影的女演员数目要不小于他看的第i的电影的女演员数。
求看最多的电影数目时,看了那几部,没看哪几部,1 表示看过0表示没看过
思路:二分图,但是要动态的去建图, 边建图,边检查,
当向图中加入一个新节点时候,我们要考虑以下几种情况:
1.这部电影是否能被当前已经看完电影的同学接着看(二分图匹配,看一下电影和之前电影之间能否构成连通分量)如果可以继续加点
2.这部电影被孤立,那么我们就要看下可否有没在看电影的学生,如果有,就让他看这部电影,然后继续加点
3.如果上述两种情况都不成立,那么这部电影舍去,不看
题意 : k 个学生去看n个电影,每个电影有自己的开始时间,结束时间和女演员数目,并且,要保证一个学生同时不能看两场电影,其次,学生看的第i+1个电影的女演员数目要不小于他看的第i的电影的女演员数。
求看最多的电影数目时,看了那几部,没看哪几部,1 表示看过0表示没看过
思路:二分图,但是要动态的去建图, 边建图,边检查,
当向图中加入一个新节点时候,我们要考虑以下几种情况:
1.这部电影是否能被当前已经看完电影的同学接着看(二分图匹配,看一下电影和之前电影之间能否构成连通分量)如果可以继续加点
2.这部电影被孤立,那么我们就要看下可否有没在看电影的学生,如果有,就让他看这部电影,然后继续加点
3.如果上述两种情况都不成立,那么这部电影舍去,不看
#include <iostream> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <vector> using namespace std; #define MAXN 105 #define inf 0x3f3f3f3f int lef[MAXN]; bool del[MAXN]; bool con[MAXN]; vector<int> G[MAXN]; bool match(int x){ for( int i = 0; i < G[x].size(); i++){ int v = G[x][i]; if(del[v]) continue; if(!con[v]){ con[v] = true; if(lef[v] == -1 || match(lef[v])){ lef[v] = x; return true; } } } return false; } int n, k, a[MAXN], b[MAXN], c[MAXN]; int solve(){ memset(lef, -1, sizeof(lef)); int ans = 0; for(int i = 1; i <= n; i++){ if(del[i]) continue; memset(con, 0, sizeof(con)); if(match(i)) ans++; } return ans; } bool ok(int x, int y){ return(b[x] <= a[y] && c[x] <= c[y]); } int main(){ while(scanf("%d %d",&n, &k) != EOF){ memset(del, false, sizeof(del)); int delnum = 0; for( int i = 1; i <= n; i++){ G[i].clear(); scanf("%d %d %d",&a[i], &b[i], &c[i]); } for( int i = 1; i <= n; i++ ){ for( int j = 1; j < i; j++ ){ if(ok(i, j)) G[i].push_back(j); if(ok(j, i)) G[j].push_back(i); } int yes = 1; int tep = solve(); tep = i - delnum - tep; if(tep > k){ del[i] = true; delnum ++; yes = 0; } printf("%d",yes); } puts(""); } return 0; }
相关文章推荐
- 创建堆,堆排序的详细实现过程,C++完整代码
- Github 初次使用 commit命令提交失败
- java中的clone
- 项目规划阶段-乙方要求的东西在项目周期例会应该说明
- 海量小文件存储与Ceph实践
- 句柄类思想
- libgdx API之Actor.setZIndex():渲染有序
- hdu5386Cover 暴力枚举
- 软件列表
- 用Discuz 搭建个人论坛
- SYSTICK配置
- Delphi操作Unicode字符
- 08/13 D -> codeforces Round #Pi div 2 E. President and Roads 最短路变形
- 搜狐-入职周年祝贺
- asp 实现域名转向
- 如何解决mathpage.dll或MathType.dll文件找不到问题
- 新浪微博ERROR_CODE:21301.auth by Null spi问题
- GCD之dispatch queue深入浅出
- C#贪吃蛇(窗体版本)
- leetcode 判断两棵树是否一致Same Tree