加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

POJ PKU 1422 最小路径覆盖。

(2010-08-04 15:33:31)
标签:

poj

pku

1422

最小路径覆盖。

it

分类: 图论

题目描述:很裸的最小路径覆盖。

解题报告:求二分图最大匹配。点数-匹配数即为所求,证明见算法艺术(lrj) P334

代码如下:

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
#define size 121
int t, nn, mm, g[size][size], match[size], vst[size], a, b, n, m;
int find(int u)
{
    for(int i = 1; i <= m; i++)
        if (!vst[i] && g[u][i])
        {
            vst[i] = 1;
            if (match[i] == -1 || find(match[i]))
            {
                match[i] = u;
                return 1;
            }
        }
    return 0;
}
int solve()
{
    memset(match, -1, sizeof(match));
    int ans = 0;
    for(int i = 1; i <= n; i++)
    {
        memset(vst, 0, sizeof(vst));
        ans += find(i);
    }
    return ans;
}
int main()
{
    scanf("%d", &t);
    while(t--)
    {
        scanf("%d%d", &nn, &mm);
        memset(g, 0, sizeof(g)); n = m = nn;
        for(int i = 0; i < mm; i++)
        {
            scanf("%d%d", &a, &b);
            g[a][b] = 1;
        }
        printf("%d\n", nn - solve());
    }
    return 0;
}

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有