hdu 3729 二分图匹配

来源:互联网 发布:会计搜题软件 编辑:程序博客网 时间:2024/06/05 15:27
想一想就能看出来,其实就是学生和排名的最大匹配,不过只是反向开始匹配而已
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;struct node{    int a,b;} e[65];int book[100100];int f[100100];int true1[65];int dfs(int x){    for(int i=e[x].a; i<=e[x].b; i++)    {        if(!book[i])        {            book[i]=1;            if(f[i]==-1||dfs(f[i]))            {                f[i]=x;                return 1;            }        }    }    return 0;}int main(){    int t;    scanf("%d",&t);    while(t--)    {        int n;        scanf("%d",&n);        for(int i=1; i<=n; i++)        {            scanf("%d%d",&e[i].a,&e[i].b);        }        int ans=0;        memset(f,-1,sizeof(f));       memset(true1,0,sizeof(true1));        for(int i=n; i>=1; i--)        {            memset(book,0,sizeof(book));            if(dfs(i))            {                ans++;                true1[i]=1;            }        }        printf("%d\n",ans);        int k=0;        for(int i=1; i<=n; i++)        {            if(true1[i]==1)            {                if(k==0)                    printf("%d",i);                else printf(" %d",i);                k++;            }        }        printf("\n");    }}

原创粉丝点击