rt P1640 [SCOI2010] 连续攻击游戏
求调 匈牙利算法 %%%Orz
代码如下(码风优良)
#include<bits/stdc++.h>
#define MAXN 1000010
using namespace std;
int nx,ny,vis[MAXN],match[MAXN];
vector<int>g[MAXN];
bool find(int x)
{
for(int i=0;i<g[x].size();i++)
{
int y=g[x][i];
if(!vis[y])
{
vis[y]=true;
if(match[y]<0||find(match[y]))
{
match[y]=x;
return true;
}
}
}
return false;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
int u,v;
cin>>nx;
for(int i=1;i<=nx;i++)
{
cin>>u>>v;
g[u].push_back(i);
g[v].push_back(i);
}
int ans=0;
memset(match,-1,sizeof(match));
for(int i=1;i<=min(nx,100000);i++)
{
memset(vis,0,sizeof(vis));
if(find(i))++ans;
else break;
}
cout<<ans;
return 0;
}