码迷,mamicode.com
首页 > 其他好文 > 详细

Bipartitegraph2594

时间:2014-10-09 01:09:17      阅读:245      评论:0      收藏:0      [点我收藏+]

标签:style   io   ar   for   sp   art   c   问题   on   

 

最小路径覆盖就是找出最小的路径条数(每个顶点只用一次),使图成为的一个路径覆盖.

 

最小路径覆盖数=节点数 最大匹配数

 

 

题意:不是赤裸裸的最小路径覆盖(走遍所有的点),正常的最小路径覆盖中两个人走的路径不能有重复的点,而本题可以重复。

 

分析:我们仍可将问题转化为最小路径覆盖。(通过传递闭包,在所有能最终连通的两个点上增加一条新边,从而使得中间被跳过的那些顶点可以被重复经过)。然后正常求最小路径覆盖即可。

 

 

#include <stdio.h>

#include <string.h>

#define N 301

int match[N],map[N][N];

int cn,mn;

bool used[N];

int find(int x)

{

    for(int i=1;i<=cn;i++)

    if(!used[i]&&map[x][i])

    {

        used[i]=true;

        if(match[i]==-1||find(match[i]))

        {

            match[i]=x;

            return true;

        }

 

    }

    return false;

}

 

int Hungry()

{

    int sum=0;

    for(int i=1;i<=cn;i++)

    {

        memset(used,false,sizeof(used));

        if(find(i))sum++;

    }

    return sum;

}

 

int main()

{

    int num,st,ca;

    scanf("%d",&ca);

    while(ca--)

    {

        scanf("%d%d",&cn,&mn);

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

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

        for(int i=1;i<=mn;i++)

        {

            scanf("%d%d",&num,&st);

                map[num][st]=1;

        }

        printf("%d\n",cn-Hungry());

 

    }

 

}

 

Bipartitegraph2594

标签:style   io   ar   for   sp   art   c   问题   on   

原文地址:http://www.cnblogs.com/notlate/p/4012205.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!