二分图基础--Girls and Boys

二分图模板,剩下的就是建图的过程。

int dfs(int a)
{
    int i;
    for(i=0;i<n;i++)
    {
        if(!vis[i]&&mapp[a][i])
        {
            vis[i] = 1;
            if(dis[i]==-1||dfs(dis[i]))
            {
                dis[i] = a;
                return 1;
            }
        }
    }
    return 0;
}

题目的完整代码。

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
int mapp[500][500];
int vis[1100],dis[1100];
int n;
int dfs(int a)
{
    int i;
    for(i=0;i<n;i++)
    {
        if(!vis[i]&&mapp[a][i])
        {
            vis[i] = 1;
            if(dis[i]==-1||dfs(dis[i]))
            {
                dis[i] = a;
                return 1;
            }
        }
    }
    return 0;
}
int main()
{
    int a,b,c;
    int sum;
    int i,j;
    while(scanf("%d",&n)!=EOF)
    {
        sum = 0;
        memset(mapp,0,sizeof(mapp));
        for(j=0;j<n;j++)
        {
            scanf("%d: (%d) ",&a,&b);
            for(i=1; i<=b; i++)
            {
                scanf("%d",&c);
                mapp[a][c] = 1;
            }
        }
        memset(dis,-1,sizeof(dis));
        for(i=0;i<n;i++)
        {
             memset(vis,0,sizeof(vis));
             if(dfs(i))
             {
                 sum++;
             }
        }
     //   printf("%d\n%d\n",n,sum);
        printf("%d\n",n-sum/2);
    }
    return 0;
}

Description

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.

Sample 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 

Sample Output

 5
2 

二分图基础--Girls and Boys

时间: 2024-10-14 14:11:42

二分图基础--Girls and Boys的相关文章

POJ 1466 Girls and Boys(二分图匹配+拆点+最大独立集)

POJ 1466 Girls and Boys 题目链接 题意:n个人,每个人有一个爱慕的集合,现在要挑出一些人,使得集合中没有人两两爱慕,问这个集合最大人数是多少 思路:每个人拆成两点,爱慕和被爱慕,然后建图,跑二分图最大匹配,由于爱慕关系是相互的,所以匹配数会多2倍,然后人数n - 最大匹配数 / 2就是最大独立集 代码: #include <cstdio> #include <cstring> #include <vector> #include <algo

poj 1466 Girls and Boys(二分图的最大独立集)

http://poj.org/problem?id=1466 Girls and Boys Time Limit: 5000MS   Memory Limit: 10000K Total Submissions: 11085   Accepted: 4956 Description In the second year of the university somebody started a study on the romantic relations between the students

poj 1466 Girls and Boys 二分图的最大匹配

Girls and Boys Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://poj.org/problem?id=1466 Description In the second year of the university somebody started a study on the romantic relations between the students. The relation "romantically involved&q

POJ 1466 Girls and Boys (匈牙利算法 最大独立集)

Girls and Boys Time Limit: 5000MS   Memory Limit: 10000K Total Submissions: 10912   Accepted: 4887 Description In the second year of the university somebody started a study on the romantic relations between the students. The relation "romantically in

【HDOJ 1068】Girls and Boys

[HDOJ 1068]Girls and Boys 二分图最大独立集问题 原本想用最大独立集 = 补图的最大团来做..结果超时 后来改用二分图最大独立集 = 顶点数 - 二分图最大匹配来做,.vis数组没用好 又超 最后改来改去改对了-- 由于输入建图是双向的 所以要减两倍的最大匹配 代码如下: #include <cstdlib> #include <cstdio> #include <cstring> #include <iostream> #inclu

hdu 1068 Girls and Boys(匈牙利算法求最大独立集)

Girls and Boys Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 7044    Accepted Submission(s): 3178 Problem Description the second year of the university somebody started a study on the roman

HDU——1068 Girls and Boys

Girls and Boys Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 12246    Accepted Submission(s): 5768 Problem Description the second year of the university somebody started a study on the roma

(hdu step 6.3.2)Girls and Boys(比赛离开后几个人求不匹配,与邻接矩阵)

称号: Girls and Boys Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 189 Accepted Submission(s): 127   Problem Description the second year of the university somebody started a study on the romanti

(hdu step 6.3.2)Girls and Boys(求最大独立集)

题目: Girls and Boys Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 189 Accepted Submission(s): 127   Problem Description the second year of the university somebody started a study on the romanti