POJ - 3216 Repairing Company 二分图 最小路径覆盖
2015-06-09 00:40
423 查看
题目大意:有一个人开了一间维修店。某天,该维修店接收到了Q个任务,这Q个任务分布在M个城市中。每个任务有三个值,分别是所在城市,起始时间,维修时间。
现在给出M个城市的路线图,路线对应的是从某城市到某城市的所需时间。
问至少要派多少个维修人员才能完成这Q个任务
解题思路:现将能联通的城市联通起来,用floyd求出城市之间的时间数
接着就要找关系了,如果
起始时间 + 维修时间 + 两个城市来往的时间 <= 另外一个任务的起始时间
就表示该任务做完后可以接着做下一个任务,这样关系就明确了
现在要求的是派出的工程师最少,也转换成了求二分图的最小路径覆盖问题了
现在给出M个城市的路线图,路线对应的是从某城市到某城市的所需时间。
问至少要派多少个维修人员才能完成这Q个任务
解题思路:现将能联通的城市联通起来,用floyd求出城市之间的时间数
接着就要找关系了,如果
起始时间 + 维修时间 + 两个城市来往的时间 <= 另外一个任务的起始时间
就表示该任务做完后可以接着做下一个任务,这样关系就明确了
现在要求的是派出的工程师最少,也转换成了求二分图的最小路径覆盖问题了
[code]#include<cstdio> #include<cstring> using namespace std; const int N = 25; const int maxn = 210; const int INF = 0x3f3f3f3f; struct Task{ int block, start, time; }task[maxn]; int Q, M; int g , link[maxn], vis[maxn]; bool ok[maxn][maxn]; void floyd() { for(int k = 1; k <= M; k++) for(int i = 1; i <= M; i++) for(int j = 1; j <= M; j++) if(g[i][k] + g[k][j] < g[i][j]) g[i][j] = g[i][k] + g[k][j]; } void init() { int t; for(int i = 1; i <= M; i++) { for(int j = 1; j <= M; j++) { scanf("%d", &g[i][j]); if(g[i][j] == -1) g[i][j] = INF; } } floyd(); for(int i = 1; i <= Q; i++) scanf("%d%d%d", &task[i].block, &task[i].start, &task[i].time); memset(ok, 0, sizeof(ok)); int x, y; for(int i = 1; i <= Q; i++) for(int j = 1; j <= Q; j++) { x = task[i].block; y = task[j].block; if(task[i].start + task[i].time + g[x][y] <= task[j].start) ok[i][j] = true; } memset(link, 0, sizeof(link)); } bool dfs(int u) { for(int i = 1; i <= Q; i++) { if(vis[i] || !ok[u][i]) continue; vis[i] = 1; if(!link[i] || dfs(link[i])) { link[i] = u; return true; } } return false; } void hungary() { int ans = 0; for(int i = 1; i <= Q; i++) { memset(vis,0,sizeof(vis)); if(dfs(i)) ans++; } printf("%d\n", Q - ans); } int main() { while(scanf("%d%d", &M, &Q) != EOF && M + Q) { init(); hungary(); } return 0; }
相关文章推荐
- 智能电动车“AIRWHEEL”:分享炫酷智能人生
- git pull报错:Auto Merge Failed的处理
- 可恶的百度! G0603_71376.exe
- Contains Duplicate II
- Contains Duplicate
- leetcode 011 Container With Most Water
- Kafka设计解析(三)- Kafka High Availability (下)
- Kafka设计解析(三)- Kafka High Availability (下)
- RabbitMQ消息队列(一): Detailed Introduction 详细介绍
- adb.exe,start-server' failed -- run manually if necessary
- SCORM Explained
- 查看事务锁:innodb_trx + innodb_locks + innodb_lock_waits
- JetBrain WebStorm 注册码
- ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
- AIDL 进程间通信
- 错误1_clang: error: linker command failed with exit code 1 (use -v to see invocation)
- leetcode Climbing Stairs
- pthread_cond_wait的spurious wakeup问题
- YARN Fair Scheduler 配置
- LeetCode:Contains Duplicate Ⅲ