zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    moment.js获取当前日期是当年的第几周
    angulajs中引用chart.js做报表,修改线条样式
    moment算本月开始日期和结束日期
    TFS(Team Foundation Server)敏捷使用教程(四):工作项跟踪(1)
    个人微信收款回调通知
    Winform,Wpf快捷键
    RemindMe
    数组循环左移p位
    RemindMe 说明
    双网卡同时上内外网
  • 原文地址:https://www.cnblogs.com/Deng1185246160/p/3238308.html
Copyright © 2011-2022 走看看