• zoj1137 poj1466


    Girls and Boys

    Time Limit: 10 Seconds      Memory Limit: 32768 KB

    the second year of the university somebody started a study on the romantic relations between the students. The relation ��romantically involved�� is defined between one girl and one boy. For the study reasons it is necessary to find out the maximum set satisfying the condition: there are no two students in the set who have been ��romantically involved��. The result of the program is the number of students in such a set.

    The input contains several data sets in text format. Each data set represents one set of subjects of the study, with the following description:

    the number of students
    the description of each student, in the following format
    student_identifier:(number_of_romantic_relations) student_identifier1 student_identifier2 student_identifier3 ...
    or
    student_identifier:(0)

    The student_identifier is an integer number between 0 and n-1, for n subjects.
    For each given data set, the program should write to standard output a line containing the result.

    An example is given in Figure 1.


    Input

    7
    0: (3) 4 5 6
    1: (2) 4 6
    2: (0)
    3: (0)
    4: (2) 0 1
    5: (1) 0
    6: (2) 0 1
    3
    0: (2) 1 2
    1: (1) 0
    2: (1) 0


    Output

    5

     最大独立点集:

    #include<cstring>
    #include<iostream>
    #include<string>
    #include<cstdio>
    using namespace std;
    const int maxn = 505;
    int match[maxn];int used[maxn];int map[maxn][maxn];int n;
    int dfs(int s)
    {
        int i,temp;
        for(i=0;i<n;i++)
        {
            if(map[s][i] && !used[i])
            {
                used[i] = 1;
            //    temp = match[i];
                if(match[i]==-1 || dfs(match[i]))
                {
                    match[i] = s;
                    return 1;
                }
            }
        }
        return 0;
    }
    int solve()
    {
        int i,ans= 0;
        memset(match,-1,sizeof(match));
        for(i=0;i<n;i++)
        {
            memset(used,0,sizeof(used));
            if(dfs(i)) ans++;
            //if(ans==n) break;
        }
        return ans;
    }
    int main()
    {
        int m,x,y,i;
        while(scanf("%d",&n)!=EOF)
        {
            memset(map,0,sizeof(map));
            for(i=0;i<n;i++)
            {
                scanf("%d: (%d)",&x,&m);
                while(m--)
                {
                    scanf("%d",&y);
                    map[x][y] =  1;
                }
            }
            int t  = solve();
                printf("%d
    ",n-t/2);
        }
        return 0;
    }
  • 相关阅读:
    list转datatable,SqlBulkCopy将DataTable中的数据批量插入数据库
    Html.BeginForm 与Section、Partial View 和 Child Action
    e.stopPropagation();与 e.preventDefault();
    NPOI导出
    Excel导入导出(篇二)
    Excel导入导出,通过datatable转存(篇一)
    ajax请求加载Loading或错误提示
    jQuery UI dialog
    Zebra_Dialog 弹出层插件
    Google浏览器导出书签
  • 原文地址:https://www.cnblogs.com/Deng1185246160/p/3238308.html
Copyright © 2020-2023  润新知