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

POJ 2594 Treasure Exploration(最小可相交路径覆盖)题解

题意:有n个点,m条单向边,每个机器人能沿着单向边走,能重复经过一个点,问最少几个机器人走遍n个点

思路:原来以前学的都是不能相交的算法....可相交的做法是跑Floyd把能到达的都加上边,然后跑最小覆盖

代码:

#include<set>
#include<map>
#include<stack>
#include<cmath>
#include<queue>
#include<vector>
#include<string>
#include<cstdio>
#include<cstring>
#include<sstream>
#include<iostream>
#include<algorithm>
typedef long long ll;
using namespace std;
const int maxn = 500 + 10;
const int MOD = 1e9 + 7;
const int INF = 0x3f3f3f3f;
int linker[maxn], n, m;
int g[maxn][maxn];
bool used[maxn];
bool dfs(int u){
    for(int v = 1; v <= n; v++){
        if(g[u][v] && !used[v]){
            used[v] = true;
            if(linker[v] == -1 || dfs(linker[v])){
                linker[v] = u;
                return true;
            }
        }
    }
    return false;
}
int hungry(){
    int res = 0;
    memset(linker, -1, sizeof(linker));
    for(int u = 1; u <= n; u++){
        memset(used, false, sizeof(used));
        if(dfs(u)) res++;
    }
    return res;
}
void floyd(){
    for(int k = 1; k <= n; k++){
        for(int i = 1; i <= n; i++){
            for(int j = 1; j <= n; j++){
                if(g[i][k] && g[k][j])
                    g[i][j] = 1;
            }
        }
    }
}
int main(){
    while(~scanf("%d%d", &n, &m) && n + m){
        memset(g, 0, sizeof(g));
        while(m--){
            int u, v;
            scanf("%d%d", &u, &v);
            g[u][v] = 1;
        }
        floyd();
        printf("%d\n", n - hungry());
    }
    return 0;
}

 

转载于:https://www.cnblogs.com/KirinSB/p/10472998.html

相关文章:

  • Docker下部署自己的LNMP工作环境
  • 移动APP安全测试
  • 如何让一个矩形外围为同一个数
  • Spark入Hbase的四种方式效率对比
  • 如何用30分钟快速优化家中Wi-Fi?阿里工程师有绝招
  • Notepad++ 7.6.4 发布,不会再有可信任的 UAC 弹窗
  • SAP 联合忽米网、重庆高新区,共建「重庆中小企业智能化赋能中心」
  • Elasticsearch在后台启动
  • 小程序开发-8-流行页面编码与组件的细节知识
  • 向量的基本运算
  • 计算几何函数库(转)
  • java并发多线程显式锁Condition条件简介分析与监视器 多线程下篇(四)
  • 2019阿里云峰会-边缘计算专场,邀您共话大连接低时延场景下的技术探索与实践...
  • RPM 包的构建 - 实例
  • macOS Mojave 无法运行未签名程序的解决方案
  • Electron入门介绍
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • Java,console输出实时的转向GUI textbox
  • Java读取Properties文件的六种方法
  • jdbc就是这么简单
  • LeetCode算法系列_0891_子序列宽度之和
  • passportjs 源码分析
  • Python利用正则抓取网页内容保存到本地
  • Sass 快速入门教程
  • unity如何实现一个固定宽度的orthagraphic相机
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 今年的LC3大会没了?
  • 理解在java “”i=i++;”所发生的事情
  • 模型微调
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 前端性能优化——回流与重绘
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 容器镜像
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • $ git push -u origin master 推送到远程库出错
  • (07)Hive——窗口函数详解
  • (1)Android开发优化---------UI优化
  • (C语言)逆序输出字符串
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (NSDate) 时间 (time )比较
  • (ZT)一个美国文科博士的YardLife
  • (zt)最盛行的警世狂言(爆笑)
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • (转)母版页和相对路径
  • (转)项目管理杂谈-我所期望的新人
  • (转载)Linux网络编程入门
  • .Net 6.0 处理跨域的方式
  • .net core 连接数据库,通过数据库生成Modell