P3041

P3041

2分图/匈牙利
第一遍写疵了..
#include  < iostream >
#include 
< fstream >
using   namespace  std;


const   int  MAXN = 501 ;
int  n,k;
bool  edge[MAXN][MAXN];
bool  hash[MAXN];
int  v[MAXN];
bool  find( int  x)
{

     
for (int j=1;j<=n;j++)
     
{
      
if  (!edge[x][j]) continue;
      
if (!hash[j])
      
{
       hash[j]
=true;
       
if (v[j]==0||find(v[j]))
       
{
        v[j]
=x;
        
return true;
       }

      }

     }

     
return false;
}

int  main()
{
    memset(edge,
0,sizeof(edge));
    

    cin
>>n>>k;
    
    
for (int i=1;i<=k;i++)
    
{
        
int x,y;
        cin
>>x>>y;
        edge[x][y]
=true;
    }

    
int count=0;
    
for (int i=1;i<=n;i++)
    
{
        memset(hash,
0,sizeof(hash));
        
if (find(i)) count++
    }

    cout
<<count<<endl;
  
// system("pause");
    return 0;
}

你可能感兴趣的:(P3041)