using namespace std;
const int MAXN = 550;
const int MAXM = 10010;
int top,head[MAXM],link[MAXN];
struct node
{
int v,next;
}edge[MAXM];
bool vis[MAXN];
void Add(int u, int v)
{
edge[top].v = v;
edge[top].next = head[u];
head[u] = top++;
}
bool DFS(int s)
{
for(int i=head[s]; i!=-1; i=edge[i].next)
{
int v = edge[i].v;
if(!vis[v])
{
vis[v] = true;
if(link[v] == 0 || DFS(link[v]))
{
link[v] = s;
return true;
}
}
}
return false;
}
int Match(int n)
{
int ans = 0;
for(int i=1;i<=n;i++)
{
memset(vis,false,sizeof(vis));
if(DFS(i))
ans++;
}
return ans;
}
二分图模板
最新推荐文章于 2023-02-28 19:31:25 发布