• HDU 1068 Girls And Boys 二分图题解


    版权声明:本文作者靖心,靖空间地址:http://blog.csdn.net/kenden23/。未经本作者同意不得转载。

    https://blog.csdn.net/kenden23/article/details/32696867

    选择出一组学生。这组学生里面不能彼此之间有过恋爱史的。

    又是一个典型的二分图问题。

    只是须要把全部学生看成一组*2,然后求最大匹配,然后除以2. 这样事实上建图的时候,建成有向图也是能够的了。并且也是给出了两个方向的点了。

    注意本题没有给出最大数是多少学生了,所以最好使用动态分配内存了。

    并且本题的输入处理也特别点,要处理好,用好scanf这个函数。


    #include <stdio.h>
    #include <stdlib.h>
    
    bool **stus, *used;
    int *linker;
    int N;
    
    void initGraph()
    {
    	stus = (bool **) malloc(N * sizeof(bool *));
    	for (int i = 1; i < N; i++)
    		stus[i] = (bool *) calloc(N, sizeof(bool));
    }
    void freeGraph()
    {
    	for (int i = 1; i < N; i++)
    		free(stus[i]);
    	free(stus);
    }
    
    bool hunDFS(int u)
    {
    	for (int v = 1; v < N; v++)
    	{
    		if (!used[v] && stus[u][v])
    		{
    			used[v] = true;
    			if (!linker[v] || hunDFS(linker[v]))
    			{
    				linker[v] = u;
    				return true;
    			}
    		}
    	}
    	return false;
    }
    
    int hungary()
    {
    	int ans = 0;
    	linker = (int *) calloc(N, sizeof(int));
    	for (int i = 1; i < N; i++)
    	{
    		used = (bool *) calloc(N, sizeof(bool));
    		if (hunDFS(i)) ans++;
    		free(used);
    	}
    	free(linker);
    	return ans>>1;
    }
    
    int main()
    {
    	int k, v;
    	while (scanf("%d", &N) != EOF)
    	{
    		N++;
    		initGraph();
    		for (int u = 1; u < N; u++)
    		{
    			scanf("%d: (%d)", &v, &k);
    			for (int i = 0; i < k; i++)
    			{
    				scanf("%d", &v);
    				stus[u][v+1] = stus[v+1][u] = true;
    			}
    		}
    		printf("%d
    ", N - 1 - hungary());
    		freeGraph();
    	}
    	return 0;
    }
    
    
    



  • 相关阅读:
    TCO 2013 2A
    matlab 中的fmincon参数设定问题
    一步步写自己SqlHelper类库(四):Connection对象
    珠海立方科技实习总结
    Web Services 应用开发学习笔记(三):XML模式定义
    C#笔记(一):类型,泛型,集合
    Web Services 应用开发学习笔记(二):XML文档类型定义
    一步步写自己SqlHelper类库(三):连接字符串
    一步步写自己SqlHelper类库(二):.NET Framework 数据提供程序
    (Joomla)多功能健康模块
  • 原文地址:https://www.cnblogs.com/ldxsuanfa/p/10630973.html
  • Copyright © 2020-2023  润新知