文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>pku1325 Machine Schedule

pku1325 Machine Schedule

时间:2010-08-05  来源:Z_Q_2010

#include<stdio.h>

const int Maxn=101;
bool g[Maxn][Maxn],visit[Maxn];
int link[Maxn];
int n,m;

bool find(int x)
{
for(int i=1;i<=m;i++)
{
if(g[x][i]&&!visit[i])
{
visit[i]=true;
if(link[i]==0||find(link[i]))
{
link[i]=x;
return true;
}
}
}
return false;
}

int main()
{
int k;
while(scanf("%d",&n),n)
{
scanf("%d%d",&m,&k);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
g[i][j]=false;

for(int i=1;i<=m;i++)
link[i]=0;

for(int i=1;i<=k;i++)
{
int v1,v2;
scanf("%*d%d%d",&v1,&v2);
g[v1][v2]=true;
}

int match=0;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
visit[j]=false;
if(find(i)) match++;
}
printf("%d\n",match);
}
return 0;
}


 

解题思路:

由题意可知,要用最少的点集关联所有的边,即求二分图的最小顶点覆盖。

二分图的最小顶点覆盖=二分图的最大顶点匹配数,具体证明参看Matrix67大牛的证明。

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载