| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
没看懂#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct edge{
int e;
int next;
}th[10010];
int vis[510],head[510],link[510];//vis检验是否已经走过,head和根节点有关,link和匹配边有关
int cnt;
void addedge(int u,int v)//建边
{
th[cnt].e=v;
th[cnt].next=head[u];
head[u]=cnt++;
}
int gungary(int u)
{
int i;
for(i=head[u];i!=-1;i=th[i].next){//按临接表在查找的过程
int v=th[i].e;
if(!vis[v]){
vis[v]=1;
if(link[v]==-1||gungary(link[v])){
link[v]=u;
return 1;
}
}
}
return 0;
}
int main()
{
int n,m,i;
scanf("%d %d",&n,&m);
cnt=0;
memset(head,-1,sizeof(head));
for(i=0;i<m;i++){
int u,v;
scanf("%d%d",&u,&v);
addedge(u-1,v-1);
}
memset(link,-1,sizeof(link));
int ans=0;
for(i=0;i<n;i++){
memset(vis,0,sizeof(vis));
if(gungary(i))
ans++;
}
printf("%d\n",ans);
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator