1 条题解

  • 0
    @ 2025-4-12 21:41:03

    C++ :

    #include<stdio.h>
    #include<string.h>
    int n,m,map[201][201],flag[201],p[201];
    char a[201][201];
    int dfs(int x)
    {
    	int i;
    	for(i=0;i<n+m;i++)
    		if(map[x][i]&&flag[i]==0)
    		{
    			flag[i]=1;
    			if(p[i]==-1||dfs(p[i]))
    			{
    				p[i]=x;
    				return 1;
    			}
    		}
    		return 0;
    }
    int main()
    {
        int i,j,s,x,y,T;
    	scanf("%d",&T);
        while(T--)
        {
    		scanf("%d%d%*c",&n,&m);
    		memset(map,0,sizeof(map));
    		memset(p,-1,sizeof(p));
    		for(i=0;i<n;i++)
    		{
    			scanf("%s",a[i]);
    			for(j=0;j<m;j++)
    				if(a[i][j]=='1')
    					map[i][n+j]=map[n+j][i]=1;
    		}
    		for(i=0,s=0;i<n+m;i++)
    		{
    			memset(flag,0,sizeof(flag));
    			if(dfs(i))
    				s++;
    		}
    		printf("%d\n",s/2);
    	}
        return 0;
    }
    
    
    • 1

    信息

    ID
    1184
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者