zoukankan      html  css  js  c++  java
  • POJ1548最小路径覆盖

    题意:
          给你一个DAG,然后问你最少多少条路径能覆盖所有需要覆盖的点。


    思路:
          最小路径覆盖,太明显了,每个点向它右下方的点连边,然后...没啥难的地方,不说了。


    #include<stdio.h>
    #include<string.h>


    #define N_node 24 * 24 + 10
    #define N_edge 24 * 24 * 24 * 24 + 100


    typedef struct
    {
        int x ,y;
    }NODE;


    typedef struct
    {
        int to ,next;
    }STAR;


    NODE node[N_node];
    STAR E[N_edge];
    int list[N_node] ,tot;
    int mkdfs[N_node] ,mkgx[N_node];


    void add(int a ,int b)
    {
        E[++tot].to = b;
        E[tot].next = list[a];
        list[a] = tot;
    }


    int DFS_XYL(int x)
    {
        for(int k = list[x] ;k ;k = E[k].next)
        {
            int to = E[k].to;
            if(mkdfs[to]) continue;
            mkdfs[to] = 1;
            if(mkgx[to] == -1 || DFS_XYL(mkgx[to]))
            {
                mkgx[to] = x;
                return 1;
            }
        }
        return 0;
    }




    int main ()
    {
        int a ,b ,i ,j, nowt ,n;
        while(~scanf("%d %d" ,&a ,&b) && a != -1)
        {
            nowt = 1;
            node[nowt].x = a;
            node[nowt].y = b;
            while(scanf("%d %d" ,&a ,&b) && a && b)
            {
                node[++nowt].x = a;
                node[nowt].y = b;
            }
            n = nowt;
            memset(list ,0 ,sizeof(list));
            tot = 1;
            for(i = 1 ;i <= n ;i ++)
            for(j = 1 ;j <= n ;j ++)
            {
                if(i == j) continue;
                if(node[i].x <= node[j].x && node[i].y <= node[j].y)
                add(i ,j);
            }
            memset(mkgx ,255 ,sizeof(mkgx));
            int Ans = 0;
            for(i = 1 ;i <= n ;i ++)
            {
                memset(mkdfs ,0 ,sizeof(mkdfs));
                Ans += DFS_XYL(i);
            }
            printf("%d " ,n - Ans);
        }
        return 0;
    }















  • 相关阅读:
    UOS、鸿蒙、麒麟全面出击,国产系统能否干掉Windows?
    黑客给疫情添乱
    人工智能与信息安全
    作为一个程序员,告诉你一些编码知识
    Linus Torvalds 宣布新版Linux系统内核发布
    linux系统root密码忘记了怎么办
    DevOps与NoOps现状分析
    Nginx服务详细介绍
    博客园“可运行"代码
    让setTimeout支持链式
  • 原文地址:https://www.cnblogs.com/csnd/p/12062491.html
Copyright © 2011-2022 走看看