http://poj.org/problem?id=2594

太经典了,最小路径覆盖之变形!如果题目中有暗示此图无环且路径是单向的话,必然是最小路径覆盖无疑!
这个题的题目意思和那个伞兵题差不多,但是伞兵走过的路径是可以交叉的,这样我们先做一个传递闭包,然后再连边做最小路径覆盖即可。

Source Code

Problem: 2594   User: 541780774
Memory: 652K   Time: 1110MS
Language: G++   Result: Accepted

Source Code

#include<stdio.h>   #include<stdlib.h>   #include<string.h>      int nx, ny;             // X的點數目、Y的點數目    int mx[501], my[501];   // X各點的配對對象、Y各點的配對對象    bool vy[501];           // 紀錄Graph Traversal拜訪過的點    bool adj[501][501];     // 精簡過的adjacency matrix       // 以DFS建立一棵交錯樹    bool DFS(int x)    {        for (int y=0; y<ny; ++y)            if (adj[x][y] && !vy[y])            {                vy[y] = true;                   // 找到擴充路徑                  if (my[y] == -1 || DFS(my[y]))                {                   mx[x] = y; my[y] = x;                   return true;                   }            }        return false;    }       int bipartite_matching()    {        // 全部的點初始化為未匹配點。        memset(mx, -1, sizeof(mx));           memset(my, -1, sizeof(my));           // 依序把X中的每一個點作為擴充路徑的端點,        // 並嘗試尋找擴充路徑。        int c = 0;        for (int x=0; x<nx; ++x)   //     if (mx[x] == -1)    // x為未匹配點,這行可精簡。            {                // 開始Graph Traversal                memset(vy, false, sizeof(vy));                if (DFS(x)) c++;            }        return c;    }   void Floyd(int n)   {           int i,j,k;           for(k=0;k<n;k++)           for(i=0;i<n;i++)           for(j=0;j<n;j++)           {              if(i!=j&&adj[i][k]&&adj[k][j])              adj[i][j]=1;           }       }              main()   {            int i,a,b,n,m;            while(scanf("%d%d",&n,&m),n!=0||m!=0)            {               memset(adj, 0, sizeof(adj));                for(i=0;i<m;i++)               {                scanf("%d%d",&a,&b);                adj[a-1][b-1]=1;               }               Floyd(n);               nx=ny=n;               printf("%d\n",n-bipartite_matching());            }            system("pause");   }        

转载于:https://www.cnblogs.com/zxj015/archive/2011/02/12/2740287.html

poj2594 Treasure Exploration 二分匹配之最小路径覆盖+传递闭包相关推荐

  1. POJ Treasure Exploration 【DAG交叉最小路径覆盖】

    传送门:http://poj.org/problem?id=2594 Treasure Exploration Time Limit: 6000MS   Memory Limit: 65536K To ...

  2. POJ2594 Treasure Exploration[DAG的最小可相交路径覆盖]

    Treasure Exploration Time Limit: 6000MS   Memory Limit: 65536K Total Submissions: 8301   Accepted: 3 ...

  3. 【POJ - 2594】Treasure Exploration(floyd传递闭包 + 最小路径覆盖,图论)

    题干: Have you ever read any book about treasure exploration? Have you ever see any film about treasur ...

  4. 【网络流24题】 No.3 最小路径覆盖问题 (网络流|匈牙利算法 -最大二分匹配)...

    [题意] 给定有向图 G=(V,E).设 P 是 G 的一个简单路(顶点不相交) 的集合.如果 V 中每个 顶点恰好在 P 的一条路上,则称 P 是 G 的一个路径覆盖. P 中路径可以从 V 的任何 ...

  5. POJ 2594 Treasure Exploration (可相交最小路径覆盖)

    题意 给你张无环有向图,问至少多少条路径能够覆盖该图的所有顶点--并且,这些路径可以有交叉. 思路 不是裸的最小路径覆盖,正常的最小路径覆盖中两个人走的路径不能有重复的点,而本题可以重复. 当然我们仍 ...

  6. POJ - 2594 Treasure Exploration(最小路径覆盖-二分图最大匹配+传递闭包)

    题目链接:点击查看 题目大意:给出一个有向图,现在需要让最少的机器人沿着图遍历所有点,求出最少需要机器人的数量,注意每个点可以重复遍历 题目分析:因为要遍历所有点,所以还是变成了二分图的最小路径覆盖问 ...

  7. poj 2594 Treasure Exploration 最小路径覆盖

    题目链接:http://poj.org/problem?id=2594 建图很重要!!! 大致题意: 给出一个由n个顶点m条边组成的有向无环图.求最少可以同时存在多少路径,使得这些路径可以覆盖所有的点 ...

  8. POJ2594 Treasure Exploration

    Treasure Exploration Time Limit: 6000MS   Memory Limit: 65536K Total Submissions: 8879   Accepted: 3 ...

  9. poj2594(二分图,最小路径覆盖变形)

    Treasure Exploration Time Limit: 6000MS   Memory Limit: 65536K Total Submissions: 7611   Accepted: 3 ...

  10. POJ--2594|Treasure Exploration

    Treasure Exploration Time Limit: 6000MS   Memory Limit: 65536K Total Submissions: 8223   Accepted: 3 ...

最新文章

  1. AI换脸鉴别率超99.6%,微软用技术应对虚假信息
  2. 编程之美-连连看游戏设计方法整理
  3. good things will come late
  4. Node js redis
  5. Spring中,使用工具类无法自动注入service
  6. d.php xfso_centos平台基于snort、barnyard2以及base的IDS(入侵检测系统)的搭建与测试及所遇问题汇总...
  7. 如何在网中使用百度地图API自定义个性化地图
  8. 一个方便的颜色主题组件
  9. php函数trim(),php trim函数怎么用?
  10. 只会编程的程序员没有前途
  11. (详细带你分析错误):No property 属性名 found for type 类名,总结了其他解决办法
  12. 八大数据结构及常见面试题
  13. 成手指状态html,css手势状态定义属性cursor和自定义鼠标手势详解
  14. python判断文字是否是中文
  15. 安卓应用移植鸿蒙(五):发布鸿蒙自定义组件(har包)到MavenCenter全过程,采坑无数
  16. java阿波罗入门介绍_十分钟入门Apollo
  17. WMS仓储管理系统在各种行业中,都有哪些作用
  18. ckfinder 2.3 破解
  19. QQ空间JS代码原理
  20. 【Java笔记+踩坑】SpringBoot基础2——运维实用

热门文章

  1. 给LINUX添加一个开机执行脚本
  2. css横向排列_前端初学者李不白,html+css的角度,带你分析蘑菇街官网!!!
  3. php getelement,javascript getElementByTagName的使用_javascript技巧
  4. c++ 文件操作方式
  5. java 人脸识别 demo_基于虹软sdk,java实现人脸识别(demo)
  6. python可以500x1000_Python练习题 一. 使用匿名函数对1~1000求和,代码力求简洁。...
  7. java switch 条件_Java 条件之 switch 语句
  8. 三朵云 华为_【创业前沿】华为突然传来大消息!对不起,我要辞职了!
  9. Rabbitmq 延迟队列
  10. 【iOS-iap防护】验证用户付费收据!拒绝iap Cracker!!