BZOJ1143: [CTSC2008]祭祀river

来源:互联网 发布:php soap 天气实例 编辑:程序博客网 时间:2024/06/09 17:12

显然要求最小反链长度,转化为最小链覆盖,我好像只会最小路径覆盖?那就floyd一遍好了…>_<…,你问我ctsc原题要输出方案?很抱歉我也不会…有哪位神犇会dilworth定理输出方案求教…

#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>//by:MirrorGrayusing namespace std;const int N=211;int n,tim,map[N][N],pp[N],vis[N];int dfs(int x){    for(int i=1;i<=n;i++)if(map[x][i]){        if(vis[i]==tim)continue;        vis[i]=tim;        if(!pp[i]||dfs(pp[i])){            pp[i]=x;            return true;        }    }    return false;}int main(){    int m;scanf("%d%d",&n,&m);    for(int i=1;i<=m;i++){        int a,b;scanf("%d%d",&a,&b);        map[a][b]=true;    }    for(int k=1;k<=n;k++)    for(int i=1;i<=n;i++)    for(int j=1;j<=n;j++)    map[i][j]|=map[i][k]&map[k][j];    int ans=n;    for(int i=1;i<=n;i++)tim++,ans-=dfs(i);    printf("%d\n",ans);    return 0;}
0 0
原创粉丝点击