• 2018 FJUT ACM 校赛 G题 第七集:大战赛文斯


    2018 FJUT ACM 校赛 G题 第七集:大战赛文斯


    第七集:大战赛文斯
    TimeLimit:1000MS MemoryLimit:128MB
    64-bit integer IO format:%lld
    Problem Description
    隐藏着黑暗力量的钥匙啊,在我面前显示出真正的力量,跟你订下约定的小A命令你,封印解除!

    "天空一声巨响,老子闪亮登场,你的蛤蟆大仙满血复活啦!"

    "现在可以带我去小C那儿了吧?" 小A做出一副就你不答应,就要开干的模样

    "得嘞,你什么意思,本大仙一言九鼎,说到做到,这就带你过去"

    话音刚落,小A就乘着一蹦一蹦的蛤蟆小晋出发了。很快,小A就骑着小晋到达了目的地,然而等待着小A的不是小A心心念念的小C

    而是大魔王手下第一大将赛文斯!

    "不好,是赛文斯,快跑!" 小晋见势不妙,掉头就想跑

    "都到这儿了,我不可能会跑的,即使与全世界为敌,我也要见到小C!" 小A话音刚落,转头一看,小晋已经不见踪影!

    "年轻人,摆在你面前的是我和我的军队,打败我们,你就能见到小C,我也不欺负你,摆在你面前的是武器"火爆辣椒",来打败我吧

    我已经很久没体会到失败的感觉了!" 赛文斯说到

    小A一边思考如何应对,一边观察局势

    摆在小A面前的,是一个N*N的战阵,有K名士兵,每个士兵的坐标位置为(xi,yi)。火爆辣椒的作用是可以摧毁一行或者一列的所有士兵

    但是火爆辣椒的数量有限,那么至少需要多少"火爆辣椒"呢?

    Input
    有多组输入,请处理到EOF

    每组数据第一行为一个整数N,表示地图大小为NN。(0<N<=100)
    接下来一行输入一个整数K,代表有K个士兵,K不大于N
    N。
    接下来输入K个士兵的坐标,横纵坐标范围[1,N]。

    Output
    输出最少使用的火爆辣椒数目

    SampleInput
    3
    4
    1 1
    1 3
    2 2
    3 2
    SampleOutput
    2
    hint:放(1,2)两颗,则第一发摧毁(1,1)和(1,3),第二发摧毁(2,2)和(3,2)。


    【思路】:

    该题其实是个水题,学了二分图之后发现就是个模板题,就是求一个二分图的最小覆盖点,又因为有结论,在二分图中最小覆盖点=最大匹配数,所以我们只要按照行列建图后,跑个匈牙利算法,就可以得到答案。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<vector>
    using namespace std;
    const int MAXN = 1005;
    vector<int>maps[MAXN];
    int line[MAXN];
    int person[MAXN];
    int n,k;
    bool found(int x)
    {
        for(int i=0; i<maps[x].size(); i++)
        {
            //printf("....
    ");
            int to=maps[x][i];
            //printf("%d
    ",to);
            if(line[to]==0)
            {
                line[to]=1;
                if(person[to]==0||found(person[to]))
                {
                    person[to]=x;
                    return true;
                }
            }
        }
        return false;
    }
    int main()
    {
        while(~scanf("%d%d",&n,&k))
        {memset(person,0,sizeof(person));
            for(int i=0; i<MAXN; i++)
                maps[i].clear();
            for(int i=0; i<k; i++)
            {
                int a,b;
                scanf("%d%d",&a,&b);
                maps[a].push_back(b);
                //maps[b].push_back(a);
            }
            int sum=0;
            for(int i=1; i<=n; i++)
            {
                memset(line,0,sizeof(line));
                if(found(i))
                    sum++;
            }
            printf("%d
    ",sum);
        }
        return 0;
    }
    
  • 相关阅读:
    Field 'CID' doesn't have a default value
    HTTP Status 500
    Exceprtion:e createQuery is not valid without active transaction; nested exception is org.hibernate.HibernateException: createQuery is not valid without active transaction
    SSH框架中hibernate 出现 user is not mapped 问题
    解决Exception:Could not open Hibernate Session for transaction; nested exception is java.lang.NoClassDefFoundError: org/hibernate/engine/transaction/spi/TransactionContext
    在浏览器上直接输入 http://www.bookEstore.com就可以访问工程问题
    JavaWeb之动态页面技术JSP/EL/JSTL
    ConvertUtils.reqister注册转换器
    编写组件TComponent published $M+ 问题
    inherited 的研究。
  • 原文地址:https://www.cnblogs.com/qq136155330/p/9117258.html
Copyright © 2020-2023  润新知