BZOJ 1143: [CTSC2008]祭祀river

来源:互联网 发布:萧山哪里有学编程 编辑:程序博客网 时间:2024/05/21 10:20

建二分图,求最大独立集(点数减去最大匹配)

题目的模型好像是叫最长反链,对二分图各种不熟啊,补补补


#include<cstdio>#define N 105using namespace std; int read(){    int a=0,f=1;char c=getchar();    while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}    while(c>='0'&&c<='9'){a=a*10+c-'0';c=getchar();}    return a*f;} int n,m,mark,ans;int d[N][N],link[N],v[N];  int find(int x){    for(int i=1;i<=n;++i)        if(i!=x&&d[x][i]&&v[i]!=mark)        {            v[i]=mark;            if(!link[i]||find(link[i]))            {                link[i]=x;                return 1;            }        }    return 0;} int main(){    n=read(),m=read();    for(int i=1,x,y;i<=m;++i)    {        x=read(),y=read();        d[x][y]=1;    }    for(int k=1;k<=n;++k)        for(int i=1;i<=n;++i)            for(int j=1;j<=n;++j)                d[i][j]=d[i][j]|(d[i][k]*d[k][j]);    for(int i=1;i<=n;++i)    {        ++mark;        ans+=find(i);    }    printf("%d\n",n-ans);    return 0;}


原创粉丝点击