zoukankan      html  css  js  c++  java
  • poj2594

    最小路径覆盖

    题意:不是赤裸裸的最小路径覆盖(走遍所有的点),正常的最小路径覆盖中两个人走的路径不能有重复的点,而本题可以重复。

    分析:我们仍可将问题转化为最小路径覆盖。如果一个人需要经过另一个人走过的点的时候,让他直接从该点上空飞过去,越过该点,直接走下一个点。如果我们赋予每个人这种能力,那么求得的无重复点的最小路径覆盖结果,就是题目要求的结果,因为需要重复的地方只要飞过去,就可以不重复了。赋予这个能力的方法就是把所有点能间接到达的点全都改为直接到达。然后正常求最小路径覆盖即可。

    View Code
    #include <iostream>
    #include
    <cstdlib>
    #include
    <cstring>
    #include
    <cstdio>
    using namespace std;

    #define maxn 500

    int n, m;
    bool map[maxn][maxn];
    int xM[maxn], yM[maxn];
    bool chk[maxn];

    bool SearchPath(int u)
    {
    int v;
    for (v = 0; v < n; v++)
    if (map[u][v] && !chk[v])
    {
    chk[v]
    = true;
    if (yM[v] == -1 || SearchPath(yM[v]))
    {
    yM[v]
    = u;
    xM[u]
    = v;
    return true;
    }
    }
    return false;
    }

    int MaxMatch()
    {
    int u, ret = 0;
    memset(xM,
    -1, sizeof(xM));
    memset(yM,
    -1, sizeof(yM));
    for (u = 0; u < n; u++)
    if (xM[u] == -1)
    {
    memset(chk,
    false, sizeof(chk));
    if(SearchPath(u))
    ret
    ++;
    }
    return ret;
    }

    void input()
    {
    int a, b;
    for (int i = 0; i < m; i++)
    {
    scanf(
    "%d%d", &a, &b);
    a
    --;
    b
    --;
    map[a][b]
    = true;
    }
    }

    void floyd()
    {
    for (int k = 0; k < n; k++)
    for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++)
    if (i != j && map[i][k] && map[k][j])
    map[i][j]
    = true;
    }

    int main()
    {
    //freopen("t.txt", "r", stdin);
    while (scanf("%d%d", &n, &m), n | m)
    {
    memset(map,
    0, sizeof(map));
    input();
    floyd();
    int ans = n - MaxMatch();
    if (ans == 0)
    ans
    = 1;
    printf(
    "%d\n", ans);
    }
    return 0;
    }
  • 相关阅读:
    备忘录 | ‘神器’在手,新世界大门我有
    1001种玩法 | HotswapAgent:支持无限次重定义运行时类与资源
    面面观 | CentOS install etcd 测试
    控制台、终端、虚拟终端和伪终端
    KMP算法,BoyerMoore算法
    qemu kvm 虚拟化
    web端log4net输出错误日志到mysql
    JQuery调用WCF服务,部署在iis
    首篇
    微信支付接口
  • 原文地址:https://www.cnblogs.com/rainydays/p/2171736.html
Copyright © 2011-2022 走看看