zoukankan      html  css  js  c++  java
  • hihoCoder 1394 : 网络流四·最小路径覆盖

    题目链接:https://hihocoder.com/problemset/problem/1394

    题目说是网络流,但是其实就是求有向无环图的最小路径覆盖。

    不会网络流,只好用二分匹配了。

    把每个点,拆成入点,和出点,一条路径就是在B块一定是匹配了的,也就是说要求的最小路径覆盖,就是那些没有匹配的点,经过最大匹配后,B块剩下没有匹配的点是最少的,也就对应了最小需要的路径数。

    所以: 最小路径覆盖 = N -最大匹配

    //Asimple
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    using namespace std;
    #define INF 0xffffff
    #define CLS(a, v) memset(a, v, sizeof(a))
    #define debug(a) cout<<#a<<" = "<<a<<endl
    typedef long long ll ;
    const int maxn = 1005;
    //const int dx[]= {1,-1,0,0}, dy[]= {0,0,1,-1};
    int dx[]={0,0,-1,-1,-1,1,1,1};
    int dy[]={-1,1,-1,0,1,-1,0,1};
    ll n, T, num, cnt, x, y, t, m;
    //ll dp[maxn][maxn];
    bool Map[maxn][maxn];
    bool vis[maxn];
    int link[maxn], in[maxn], out[maxn];
    
    bool dfs(int x) {
        for(int i=1; i<=n; i++) {
            if( !vis[i] && Map[x][i] ) {
                vis[i] = true;
                if( link[i]==-1 || dfs(link[i])) {
                    link[i] = x;
                    return true;
                }
            }
        }
        return false;
    }
    
    void input() {
        ios_base::sync_with_stdio(false);
        while( cin >> n >> m ) {
            CLS(Map, false);
            CLS(link, -1);
            while( m -- ) {
                cin >> x >> y;
                Map[x][y] = true;
            }
            cnt = 0;
            for(int i=1; i<=n; i++) {
                CLS(vis, false);
                if( dfs(i) ) cnt ++;
            }
            cout << n-cnt << endl;
        }
    }
    
    int main() {
        input();
        return 0;
    }
  • 相关阅读:
    android开发架构理解
    检测到LoaderLock”的解决办法(新办法,在vs2008中)
    1-2SPRING-BOOT-JPA添加lombok-管理getter/setter
    PHP数组使用
    处理sublime中文乱码
    c#遍历datatable,dataset
    sublime3更换主题,主题推荐
    laravel voyager 安装
    array_filter,匿名函数
    git 记住密码
  • 原文地址:https://www.cnblogs.com/Asimple/p/8659850.html
Copyright © 2011-2022 走看看