• hdu 1054 Strategic Game (二分匹配)


    点击打开链接
    最小覆盖。。。本题是双向图
    典型的最小顶点覆盖!最小顶点覆盖 == 最大匹配(双向图)/2;
              此题有个小细节,数据较大,要用邻接表,不然会超时! 

    #include"stdio.h"
    #include"string.h"
    int map[1501][1501],mark[1501];
    int link[1501],v[1501];
    int n;
    int dfs(int k)
    {
    	int i;
    	for(i=0;i<n;i++)
    	{
    		if(map[k][i]==1&&!v[i])
    		{
    			v[i]=1;
    			if(link[i]==0||dfs(link[i]))
    			{
    				link[i]=k;
    				return 1;
    			}
    		}
    	}
    	return 0;
    }
    int main()
    {
    	int i,j,t,a,b,count;
    	while(scanf("%d",&n)!=-1)
    	{
    		memset(map,0,sizeof(map));
    		for(i=0;i<n;i++)
    		{
    			scanf("%d:(%d)",&a,&t);
    			for(j=0;j<t;j++)
    			{
    				scanf("%d",&b);
    				map[a][b]=1;
    				map[b][a]=1;
    			}
    		}
    		count=0;
    		memset(link,0,sizeof(link));
    		for(i=0;i<n;i++)
    		{
    			memset(v,0,sizeof(v));
    			if(dfs(i))
    				count++;
    		}
    		printf("%d\n",count/2);
    	}
    	return 0;
    }


  • 相关阅读:
    2017年9月22日 关于JS数组
    2017年9月20日
    2017年9月19日 JavaScript语法操作
    2017年9月18日
    2017年9月17日 JavaScript简介
    2017年9月16日
    2017年9月15日
    2017年9月14日
    2017年9月12日
    贪吃蛇全文
  • 原文地址:https://www.cnblogs.com/yyf573462811/p/6365278.html
Copyright © 2020-2023  润新知