当前位置: 首页 > news >正文

HDU-1350 Taxi Cab Scheme(最小路径覆盖)

题意:

n个出租车订单,每个订单有一个出发时间、出发地点、目的地点(计算过程的花费时间),当完成一个订单时,若能从当前订单的目的地点赶到另一个订单的出发地点(到达另一出发地点时至少距该订单开始还有1分钟),则可以进行下一单。问最少需要派多少辆出租车才能完成所有的订单。

思路:

乍一看时跟一个贪心的题很像,但是这题加了地点距离的限制,所以其实是一个经典的DAG最小路径覆盖问题。对当前订单完成之后和能够赶到的下一订单之间建立有向边,从而建立出一个DAG,而对于本题就是求一个最小路径覆盖。

代码:

#include <bits/stdc++.h>

using namespace std;

const int maxn = 505;
bool g[maxn][maxn], vis[maxn];
int match[maxn];
int val[maxn], keep[maxn];
int a[maxn], b[maxn], c[maxn], d[maxn];
int t, n, h, m;

bool dfs(int u)
{
    for(int i = 1; i <= n; ++i)
    {
        if(vis[i] || !g[u][i]) continue;
        vis[i] = 1;
        if(match[i] == -1 || dfs(match[i]))
        {
            match[i] = u;
            return 1;
        }
    }
    return 0;
}
int main()
{
    for(scanf("%d", &t); t--;)
    {
        scanf("%d", &n);
        memset(g, 0, sizeof g);
        for(int i = 1; i <= n; ++i)
        {
            scanf("%d:%d", &h, &m);
            scanf("%d %d %d %d", &a[i], &b[i], &c[i], &d[i]);
            val[i] = h*60+m;
            keep[i] = abs(a[i]-c[i]) + abs(b[i]-d[i]);
            for(int j = 1; j < i; ++j)
            {
                if(val[j]+keep[j]+abs(a[i]-c[j])+abs(b[i]-d[j]) < val[i])
                    g[j][i] = 1;
                if(val[i]+keep[i]+abs(a[j]-c[i])+abs(b[j]-d[i]) < val[j])
                    g[i][j] = 1;
            }
        }
        int ans = 0;
        memset(match, -1, sizeof match);
        for(int i = 1; i <= n; ++i)
        {
            memset(vis, 0, sizeof vis);
            if(dfs(i)) ++ans;
        }
        printf("%d\n", n-ans);
    }
    return 0;
}


继续加油~

相关文章:

  • codeforces-884D Boxes And Balls(思维、三叉哈夫曼树)
  • 设置c++程序的堆栈空间解决栈溢出问题
  • POJ-1932 XYZZY(判正权环路+Warlshell传递闭包)
  • Codeforces 827C DNA Evolution(多维树状数组)
  • larbin是一种开源的网络爬虫/网络蜘
  • Codeforces 855E Salazar Slytherin's Locket(数位dp)
  • JAVA爬虫 WebCollector
  • HDU-6215 Brute Force Sorting(思维、模拟链表)
  • HDU-1719 Friend(公式化简)
  • js如何获取微信版本号
  • HDU-4664 Triangulation(博弈SG打表+类似凸包性质)
  • asp。net5的依赖注入
  • 卡特兰数的初步学习
  • HDU-3723 Delta Wave(卡特兰数+大数递推)
  • oc 内存管理初级
  • 「译」Node.js Streams 基础
  • 【mysql】环境安装、服务启动、密码设置
  • 2017届校招提前批面试回顾
  • Android交互
  • crontab执行失败的多种原因
  • Docker 笔记(2):Dockerfile
  • httpie使用详解
  • Python 基础起步 (十) 什么叫函数?
  • python 学习笔记 - Queue Pipes,进程间通讯
  • STAR法则
  • vuex 学习笔记 01
  • 飞驰在Mesos的涡轮引擎上
  • 构建工具 - 收藏集 - 掘金
  • 配置 PM2 实现代码自动发布
  • 前端
  • 如何学习JavaEE,项目又该如何做?
  • 少走弯路,给Java 1~5 年程序员的建议
  • 十年未变!安全,谁之责?(下)
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • 回归生活:清理微信公众号
  • #DBA杂记1
  • #pragma pack(1)
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (k8s中)docker netty OOM问题记录
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (生成器)yield与(迭代器)generator
  • (十八)三元表达式和列表解析
  • (四)Android布局类型(线性布局LinearLayout)
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • ***利用Ms05002溢出找“肉鸡
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .net core 控制台应用程序读取配置文件app.config
  • .NET与java的MVC模式(2):struts2核心工作流程与原理
  • @FeignClient 调用另一个服务的test环境,实际上却调用了另一个环境testone的接口,这其中牵扯到k8s容器外容器内的问题,注册到eureka上的是容器外的旧版本...