求助2825
  • 板块灌水区
  • 楼主jyhDora2011
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/10/10 23:20
  • 上次更新2024/10/11 13:57:48
查看原帖
求助2825
747070
jyhDora2011楼主2024/10/10 23:20

原题通道:2825

#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int n,m,t,book[999988],ans,ma[100005],h[999][999],snum,hnum,s[999][999];
char mapn[999][999];
vector <int> ve[100055];
bool dfs(int x)
{
    for(int i=0;i<ve[x].size();i++)
    {
        int to=ve[x][i];
        if(book[to])
        {
            continue;
        }
        book[to]=1;
        if(ma[to]==0||dfs(ma[to])==1)
        {
            ma[to]=x;
            return 1;
        }
        
    }
    return 0;
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
    	for(int j=1;j<=m;j++)
    	{
    		cin>>mapn[i][j];
		}
	}
	for(int i=1;i<=n;i++)//横 
    {
    	for(int j=1;j<=m;j++)
    	{
    		if(mapn[i][j]=='*'||mapn[i][j]=='x')
    		{
    			if(mapn[i][j-1]!='*'){
    				h[i][j]=++hnum;
				}
				else if(mapn[i][j-1]=='*')
				{
					h[i][j]=hnum;
				}
			}
		}
	}
	for(int i=1;i<=m;i++)//竖 
    {
    	for(int j=1;j<=n;j++)
    	{
    		if(mapn[j][i]=='*')
    		{
    			if(mapn[j-1][i]!='*'){
    				s[j][i]=++snum;
				}
				else if(mapn[j-1][i]=='*')
				{
					s[j][i]=snum;
				}
				ve[s[j][i]].push_back(h[j][i]);
			}
		}
	}
	for(int i=1;i<=snum;i++)
    {
        memset(book,0,sizeof(book));
        if(dfs(i))
        {
            ans++;
        }
    }
	cout<<ans;
    return 0;
}

样例输出对的,交上全错,wa

2024/10/10 23:20
加载中...