zoukankan      html  css  js  c++  java
  • bzoj-1854(二分图最大匹配)

    题意:中文题意

    解题思路:首先每个装备有2种属性,这个很关键。。。,就直接猜了要不2-sat,要不二分图,然后给出n,因为n数据很大,所以考虑属性大小最多为10000,就用属性建图,第一个属性值为x部,第二个属性值为y部,跑二分图最大匹配

    代码

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=1e6+1000;
    int match[maxn];
    int visit[maxn];
    vector<int>v[maxn];
    int n,maxx,cnt;
    int x[maxn],y[maxn];
    int dfs(int u)
    {
        for(int i=0;i<v[u].size();i++)
        {
            int tmp=v[u][i];
            if(visit[tmp]==cnt)
                continue;
            visit[tmp]=cnt;
            if(match[tmp]==-1||dfs(match[tmp]))
            {
                match[tmp]=u;return 1;
            }
        }
        return 0;
    }
    int main()
    {
        scanf("%d",&n);
        memset(match,-1,sizeof(match));
        for(int i=1;i<=n;i++)
        {
            scanf("%d%d",&x[i],&y[i]);
                v[x[i]].push_back(i);
                v[y[i]].push_back(i);
        }
        int ans=0;
        for(int i=1;i<=10000;i++)
        {
           ++cnt;
            if(dfs(i))
                ans++;
            else break;
        }
        printf("%d
    ",ans);
    }
    
  • 相关阅读:
    (2).net体系
    (1)php开篇常识
    java基础知识-xx
    java基础知识-字符串与数组
    java基础知识-流程控制
    小明的喷漆计划
    加分二叉树
    括号序列
    P1045
    胖男孩
  • 原文地址:https://www.cnblogs.com/huangdao/p/10806373.html
Copyright © 2011-2022 走看看