• 【I'm Telling the Truth】【HDU


    思路

    题意:该题主要说几个同学分别说出自己的名次所处区间,最后输出可能存在的未说谎的人数及对应的学生编号,而且要求字典序最大。
    思路:刚刚接触匈牙利算法,了解的还不太清楚,附一个专门讲解匈牙利算法的博文,个人认为讲的比较清晰。

    AC代码

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int T, n;
    struct Stue
    {
        int l, r;
    };
    Stue per[60+10];
    int vis[100000+10];			//判断该点是否访问过
    int hon[60+10];				//用于记录未说谎的人的编号
    int ok[100000+10];			//标记某点存在的学生编号,未有则默认为-1
    bool dfs(int x)
    {
        if(x < 0)
            return false;
        for(int i = per[x].l; i <= per[x].r; i++)
        {
            if(!vis[i])
            {
                vis[i] = 1;
                if(ok[i] == -1 || dfs(ok[i]))
                {
                    ok[i] = x;
                    return true;
                }
            }
        }
        return false;
    }
    int main()
    {
    //    freopen("input.txt", "r", stdin);
    //    freopen("output.txt", "w", stdout);
        cin >> T;
        while(T--)
        {
            cin >> n;
            for(int i = 0; i < n; i++)
                cin >> per[i].l >> per[i].r;
            int cnt = 0;
            memset(hon, 0, sizeof(hon));
            memset(ok, -1, sizeof(ok));
            for(int i = n - 1; i >= 0; i--)			//从后往前,这样可以保证字典序最大
            {
                memset(vis, 0, sizeof(vis));
                if(dfs(i))
                    hon[cnt++] = i;
            }
            cout << cnt << endl;
            if(!cnt)
                continue;
            for(int i = cnt - 1; i > 0; i--)
                cout << hon[i] + 1 << " ";
            cout << hon[0] + 1 << endl;
        }
    }
    
  • 相关阅读:
    年尾最有可能被老板“干掉”的十类人
    jQuery学习笔记
    HttpServletRequest的应用(一)
    getRequestDispatcher()与sendRedirect()的区别
    RequestDispatcher介绍
    原子类
    多线程基础
    asp.net Treeview节点保存成XML文件
    推荐小说给大家
    http://msdn.microsoft.com/zhcn/library/system.web.ui.webcontrols.gridview.rowediting.aspx
  • 原文地址:https://www.cnblogs.com/KeepZ/p/11370841.html
Copyright © 2020-2023  润新知