山东济南彤昌机械科技有限公司 山东济南江鹏工贸游有限公司

UVa11419 SAM I AM(构造最小点覆盖)

 

题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=27475

 

【思路】

  二分图的最小点覆盖以及构造最小覆盖。

  二分图的最小点覆盖即在二分图中选出最少的点使能够将所有的边覆盖。构造思路是从所有未盖点出发拓展匈牙利树,X中的未标记点与Y中的已标记点为最小覆盖集。

  具体可见:http://www.tuicool.com/articles/jmAnEb

 

【代码】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include<cstdio>
#include<cstring>
#include<vector>
#include<iostream>
using namespace std;
 
const int maxn =  1000+10;
 
bool S[maxn],T[maxn];
int lky[maxn],lkx[maxn];
vector<int> G[maxn];
 
bool match(int u) {
    S[u]=1;
    for(int i=0;i<G[u].size();i++) {
        int v=G[u][i];
        if(!T[v]) {
            T[v]=1;
            if(!lky[v] || match(lky[v])) {
                lky[v]=u , lkx[u]=v;
                return true;
            }
        }
    }
    return false;
}
 
int n,m,k;
 
void read(int& x) {
    char c=getchar();
    while(!isdigit(c)) c=getchar();
    x=0;
    while(isdigit(c)) {
        x=x*10+c-'0' , c=getchar();
    }
}
 
int main() {
    while(scanf("%d%d%d",&n,&m,&k)==3 &&(n)) {
        for(int i=1;i<=n;i++) G[i].clear();
        int u,v;
        for(int i=0;i<k;i++) {
            read(u),read(v);
            G[u].push_back(v);
        }
        memset(lky,0,sizeof(lky));
        memset(lkx,0,sizeof(lkx));
        int ans=0;
        for(int i=1;i<=n;i++) {
            memset(T,0,sizeof(T));
            memset(S,0,sizeof(S));
            if(match(i)) ans++;
        }
        printf("%d ",ans);
        memset(S,0,sizeof(S));
        memset(T,0,sizeof(T));
        for(int i=1;i<=n;i++)
            if(!lkx[i])  match(i);
        for(int i=1;i<=n;i++)
            if(!S[i]) printf("r%d ",i);
        for(int i=1;i<=n;i++)
            if(T[i]) printf("c%d ",i);
        putchar('\n');
    }
    return 0;
}

 

posted on   hahalidaxin  阅读(268)  评论(0编辑  收藏  举报

编辑推荐:
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
阅读排行:
· 手把手教你更优雅的享受 DeepSeek
· AI工具推荐:领先的开源 AI 代码助手——Continue
· 探秘Transformer系列之(2)---总体架构
· V-Control:一个基于 .NET MAUI 的开箱即用的UI组件库
· 乌龟冬眠箱湿度监控系统和AI辅助建议功能的实现

统计

点击右上角即可分享
微信分享提示