zoukankan      html  css  js  c++  java
  • Treasure Exploration POJ

    #include<stdio.h>
    #include<string.h>
    #include<queue>
    #include<algorithm>
    using namespace std;
    #define N 510
    int vis[N], match[N], maps[N][N], n, ans;
    void floyd()
    {
        for(int k=1; k<=n; k++)
            for(int i=1; i<=n; i++)
                for(int j=1; j<=n; j++)
                    if(maps[i][k] && maps[k][j])
                        maps[i][j] = 1;
    }
    bool Find(int u)
    {
        for(int i=1; i<=n; i++)
        {
            if(!vis[i] && maps[u][i])
            {
                vis[i] = 1;
                if(!match[i] || Find(match[i]))
                {
                    match[i] = u;
                    return true;
                }
            }
        }
        return false;
    }
    int main()
    {
        int a, b, m;
        while(scanf("%d%d", &n, &m), m+n)
        {
            memset(maps, 0, sizeof(maps));
            for(int i=0; i<m; i++)
            {
                scanf("%d%d", &a, &b);
                maps[a][b]  = 1;
            }
            floyd();
            ans = 0;
            memset(match, 0, sizeof(match));
            for(int i=1; i<=n; i++)
            {
                memset(vis, 0, sizeof(vis));
                if(Find(i))
                    ans++;
            }
            printf("%d
    ", n - ans);
        }
        return 0;
    }
    
  • 相关阅读:
    HDU 5247
    HDU 4965
    CodeForces 445B
    HDU 5835
    CodeForces 731C
    HDU 5783
    CodeForces 660D
    POJ 1631
    HDU 6112
    HDU 5860
  • 原文地址:https://www.cnblogs.com/QingyuYYYYY/p/12431059.html
Copyright © 2011-2022 走看看