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;
    }















  • 相关阅读:
    如何解决IOS 下固定定位fixed 失效问题?
    fixed定位按钮在底部,键盘弹起,按钮被顶上去
    js对象和jquery对象相互转换
    # js中substr、substring、indexOf、lastIndexOf的用法
    在新页面中返回到前一页浏览的历史位置
    vue-cli构建的项目中axios的请求方式及跨域处理
    搭建基于Express框架运行环境 及其启动方式
    微信小程序Page中data数据操作和函数调用
    linux的一些基本操作
    JavaScript对象
  • 原文地址:https://www.cnblogs.com/csnd/p/12062491.html
Copyright © 2011-2022 走看看