[BZOJ1854][Scoi2010]游戏(二分图)

来源:互联网 发布:js给div赋值 编辑:程序博客网 时间:2024/05/17 03:43

题目描述

传送门

题解

二分图的最大匹配。
总是感觉复杂度有点不科学。

代码

// BZOJ 1854 #include<iostream>#include<cstring>#include<cstdio>using namespace std;const int max_n=1e6+5;const int max_e=max_n*4;int n,x,y,Max;int tot,point[max_n],nxt[max_e],v[max_e];int belong[max_n],vis[max_n];inline void addedge(int x,int y){    ++tot; nxt[tot]=point[x]; point[x]=tot; v[tot]=y;}inline bool find(int x,int k){     for (int i=point[x];i;i=nxt[i])        if (vis[v[i]]!=k)        {            vis[v[i]]=k;            if (!belong[v[i]]||find(belong[v[i]],k))            {                belong[v[i]]=x;                return true;            }        }    return false;}int main(){    scanf("%d",&n);    for (int i=1;i<=n;++i)    {        scanf("%d%d",&x,&y);        addedge(x,i); addedge(y,i);        Max=max(Max,x); Max=max(Max,y);    }    for (int i=1;i<=Max;++i)        if (!find(i,i))        {            printf("%d\n",i-1);            return 0;        }    printf("%d\n",Max);}
0 0
原创粉丝点击