zoukankan      html  css  js  c++  java
  • 2017ICPC南宁 M题 The Maximum Unreachable Node Set【二分图】

    题意:

    找出不能相互访问的点集的集合的元素数量。

    思路:

    偏序集最长反链裸题。

    代码:

    #include<iostream>
    #include<cstring>
    using namespace std;
    
    const int maxn=105;
    int g[maxn][maxn];
    
    int uN,vN;
    int linker[maxn];
    bool used[maxn];
    bool dfs(int u)
    {
        for(int v = 0; v < vN; v++)
            if(g[u][v] && !used[v])
            {
                used[v] = true;
                if(linker[v] == -1 || dfs(linker[v]))
                {
                    linker[v] = u;
                    return true;
                }
            }
        return false;
    }
    int hungary()
    {
        int res = 0;
        memset(linker,-1,sizeof(linker));
        for(int u = 0; u < uN; u++)
        {
            memset(used,false,sizeof(used));
            if(dfs(u))res++;
        }
        return res;
    }
    
    int main()
    {
        int n,m,t;
        cin>>t;
        while (t--)
        {
            cin>>n>>m;
            memset(g,0,sizeof(g));
            for (int i=1; i<=m; i++)
            {
                int u,v;
                cin>>u>>v;
                g[u-1][v-1]=1;
            }
            for (int k=0; k<n; k++)
                for (int i=0; i<n; i++)
                    for (int j=0; j<n; j++)
                        if (g[i][k] && g[k][j]) g[i][j]=1;
            uN=vN=n;
            cout<<n-hungary()<<endl;
        }
        return 0;
    }
  • 相关阅读:
    Windows环境下消息中间件RabbitMq的搭建与应用
    6.异常释放锁的情况
    5.synchronized锁重入
    4.脏读
    3.多线程(同步、异步)
    2.多线程(同步类级别锁)
    1.多线程同步
    24.Semaphore
    23.读写锁ReadWriteLock
    22.线程通信Condition
  • 原文地址:https://www.cnblogs.com/darklights/p/8000877.html
Copyright © 2011-2022 走看看