您的位置:首页 > 其它

poj 3041 最小点覆盖=最大匹配

2014-04-30 15:01 267 查看
#include<stdio.h>

#include<string.h>

#define N 510

int map

,n,mark
,link
;

int find(int u) {

int i;

for(i=1;i<=n;i++)

if(!mark[i]&&map[u][i]) {

mark[i]=1;

if(link[i]==-1||find(link[i])) {

link[i]=u;

return 1;

}

}

return 0;

}

int main() {

int i,j,k,s;

while(scanf("%d%d",&n,&k)!=EOF) {

memset(map,0,sizeof(map));

for(i=1;i<=k;i++) {

scanf("%d%d",&j,&s);

map[j][s]=1;

}

k=0;

memset(link,-1,sizeof(link));

for(i=1;i<=n;i++) {

memset(mark,0,sizeof(mark));

k+=find(i);

}

printf("%d\n",k);

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: