hdu 1151 Air Raid 匹配

来源:互联网 发布:acrobat for mac安装 编辑:程序博客网 时间:2024/06/05 07:29
#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>#include <vector>#include <queue>#include <stack>#include <set>#include <map>#include <string>#include <math.h>#include <stdlib.h>#include <time.h>using namespace std;const int MAXN=601*601+10;const int MAXM=601*601*2;struct Edge{    int to,next;} edge[MAXM];int head[MAXN],tot,mx[MAXN],cx[MAXN],cy[MAXN],mk[MAXN];void addedge(int from,int to){    edge[tot].to=to;    edge[tot].next=head[from];    head[from]=tot++;}void init(){    memset(head,0xff,sizeof(head));    tot=0;}int dfs(int u){    for(int i=head[u]; i!=-1; i=edge[i].next)    {        int v=edge[i].to;        if(!mk[v])        {            mk[v]=1;            if(cy[v]==-1||dfs(cy[v]))            {                cx[u]=v;                cy[v]=u;                return 1;            }        }    }    return 0;}int Maxmatch(int n){    int res=0;    memset(cx,0xff,sizeof(cx));    memset(cy,0xff,sizeof(cy));    for(int i=1; i<=n; i++)    {        if(cx[i]==-1)        {            memset(mk,0,sizeof(mk));            res+=dfs(i);        }    }    return res;}int main(){    int _,n,m,i,j,u,v;    scanf("%d",&_);    while(_--)    {        init();        scanf("%d",&n);        scanf("%d",&m);        for(i=0; i<m; i++)        {            scanf("%d%d",&u,&v);            addedge(u,v);        }        printf("%d\n",n-Maxmatch(n));    }    return 0;}
0 0
原创粉丝点击