zoukankan      html  css  js  c++  java
  • 2930 填报志愿

    2930 填报志愿

     

     时间限制: 1 s
     空间限制: 128000 KB
     题目等级 : 钻石 Diamond
     
     
    题目描述 Description

        高考已经结束,而志愿填报正在进行中~

        吴校长的学校里有n位同学,每位同学有ki个愿意去的大学。而在吴老师的省份中,有m所大学有招生名额。根据往年的经验,对于每所大学(编号为ci),学校中最多只会有一人考上。因此为了避免志愿冲突,每年吴校长都要安排老师对同学们的志愿进行调整。

        今年吴校长找到了你来帮忙,请你编程计算,在不冲突的情况下,最多能有多少同学顺利填报志愿,填报志愿的方案又是怎样的。

    输入描述 Input Description

        第一行,一个数n。

        接下来的n行,每行的第一个数为ki,接下来有ki个数,表示第i个同学愿意去的大学的编号。

        下一行,一个数m。 

        下一行,m个数,为m个大学的编号。保证大学编号递增。

    输出描述 Output Description

        第一行,一个数,为在不冲突的情况下,最多能有多少同学顺利填报志愿。

        接下来的若干行,输出填报志愿的方案。每行两个数,第一个数为学生编号,第二个数为大学编号,以空格隔开。若有多种可行方案,输出字典序最小的一种。

    样例输入 Sample Input

    3

    2 1 2

    3 2 4 5

    2 2 3

    5

    1 3 4 5 6

    样例输出 Sample Output

    3

    1 1

    2 4

    3 3

    数据范围及提示 Data Size & Hint

    0<n<=1000,0<ki<=20,0<m<=2000,学生的编号为1~n,大学的编号为1~5000。同学愿意去的大学不一定招生。

    分类标签 Tags 点此展开 

     
    本题没有任何注释,因为我看了看网上都说这是典型的二分图最大匹配匈牙利算法
     
    本题只需要输出方案数即可 与题目描述不同
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    using namespace std;
    #define N 1001
    int e[N][5*N],o[5*N],vis[N],match[N];
    int n,m,k,t,ans;
    int dfs(int u){
        for(int i=1;i<=n;i++){
            if(e[i][u]&&!vis[i]){
                vis[i]=1;
                if(!match[i]||dfs(match[i])){
                    match[i]=u;
                    return 1;
                }
            }
        }
        return 0;
    }
    int main(){
        scanf("%d",&n);
        for(int i=1;i<=n;i++){
            scanf("%d",&k);
            for(int j=1;j<=k;j++)
                e[i][scanf("%d",&t),t]=1;    
        }
        scanf("%d",&m);
        for(int i=1;i<=m;i++)
            o[scanf("%d",&t),t]=1;
        for(int i=1;i<=5000;i++){
            if(!o[i]) continue;
            memset(vis,0,sizeof vis);
            if(dfs(i)) ans++;
        }
        printf("%d
    ",ans);
        return 0;
    }
  • 相关阅读:
    mysql sum 重复计算_mysql join sum时数据重复问题及解决方案
    mysql数据库中,查询一个表的下一条数据减上一条数据的值的写法
    FROM_UNIXTIME 格式化MYSQL时间戳函数
    Mysql 中日期类型bigint和datetime互转
    mysql 按照指定字段的指定数据进行排序 filed函数
    MYSQL使用group by,如何查询出总记录数
    iptables添加开放端口
    MySQL之You can't specify target table for update in FROM clause解决办法
    epoll 使用 LT + 非阻塞 IO 和 ET + 非阻塞 IO 比较
    sizeof和strlen的比较
  • 原文地址:https://www.cnblogs.com/shenben/p/5573755.html
Copyright © 2011-2022 走看看