zoukankan      html  css  js  c++  java
  • [BZOJ]1854: [Scoi2010]游戏

    题目大意:n个装备,每个装备有两个属性值可以二选一,问能选出的最长的从1开始的连续正整数序列。(属性值<=10000,n<=10^6)

    思路:匈牙利二分图匹配模板复习,复杂度O(10000^2)。

    #include<cstdio>
    inline int read()
    {
        int x;char c;
        while((c=getchar())<'0'||c>'9');
        for(x=c-'0';(c=getchar())>='0'&&c<='9';)x=(x<<3)+(x<<1)+c-'0';
        return x;
    }
    #define MN 1000000
    #define MM 10001
    struct edge{int nx,t;}e[MN*2+5];
    int h[MM+5],en,cnt,u[MN+MM+5],t[MN+MM+5];
    inline void ins(int x,int y){e[++en]=(edge){h[x],y};h[x]=en;}
    bool dfs(int x)
    {
        for(int i=h[x];i;i=e[i].nx)if(u[e[i].t]!=cnt)
        {
            u[e[i].t]=cnt;
            if(!t[e[i].t]||dfs(t[e[i].t]))return t[e[i].t]=x;
        }
        return false;
    }
    int main()
    {
        int n=read(),i;
        for(i=1;i<=n;++i)ins(read(),i+MM),ins(read(),i+MM);
        for(cnt=1;dfs(cnt);++cnt);
        printf("%d",cnt-1);
    }
  • 相关阅读:
    这几天都是在公司慢待
    电脑没有关机可能出现发博文dns异常(write)
    DOS/VBS
    SourceInsight
    CevaEclipse
    C/C++
    Matlab
    Matlab
    C语言
    Matlab
  • 原文地址:https://www.cnblogs.com/ditoly/p/BZOJ1854.html
Copyright © 2011-2022 走看看