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;
    }
  • 相关阅读:
    Django(app的概念、ORM介绍及编码错误问题)
    Django(完整的登录示例、render字符串替换和redirect跳转)
    Construct Binary Tree from Preorder and Inorder Traversal
    Single Number II
    Single Number
    Binary Tree Level Order Traversal II
    Binary Tree Level Order Traversal
    Binary Tree Zigzag Level Order Traversal
    Recover Binary Search Tree
    Add Binary
  • 原文地址:https://www.cnblogs.com/rainydays/p/2171736.html
Copyright © 2011-2022 走看看