• 舔狗


    链接:https://ac.nowcoder.com/acm/contest/903/J
    来源:牛客网

    舔狗
    时间限制:C/C++ 1秒,其他语言2秒
    空间限制:C/C++ 262144K,其他语言524288K
    64bit IO Format: %lld

    题目描述

    > “舔狗舔狗,
    > 舔到最后,
    > 一无所有。”

    有 n 只舔狗,每只舔狗的心中都有自己朝思暮想的一位。

    每个人虽然受到了一万次拒绝,还毅然第一万零一次鼓起勇气。

    作为一个不食人间烟火的算法设计师,你早已看破红尘。但是,人世间的苦难仍让你挂念。看到众生在单恋中苦苦坚持,你决定普度众生,给大家找到一个最好的结局,让一无所有的舔狗尽量地少,让每个人都尽量能和自己喜欢的或喜欢自己的人修成正果。

    也就是说,你需要给这 n 只舔狗配对,对于舔狗 i,他可以和他朝思暮想的人 aia_{i}ai 配对。另外,喜欢 i 的其他舔狗也可以和他配对。你需要让没有被配对的舔狗尽量少。

    输入描述:

    第一行一个 n,表示舔狗个数。
    第二行 n 个数字,第 i 个数字表示第 i只舔狗的朝思暮想的一位的编号 aia_{i}ai
    2≤n≤1062le n le 10^62n106

    输出描述:

    第一行一个数字,表示一无所有的舔狗的最小数量。
    示例1

    输入

    复制
    10
    3 1 8 6 10 1 4 1 6 1

    输出

    复制
    0
    #include<bits/stdc++.h>
    #define ll long long
    #define inf 0x3f3f3f3f
    using namespace std;
    const int maxn=1e6+10;
    struct node{
        int pos,val;
        bool operator<(const node &cur)const {
            return val>cur.val;
        }
    };
    priority_queue<node>q;
    int n;
    int vis[maxn];
    int w[maxn],e[maxn];
    int main()
    {
        scanf("%d",&n);
        for(register int i=1;i<=n;++i){
            scanf("%d",w+i);
            e[w[i]]++;
        }
        for(register int i=1;i<=n;++i){
            q.push(node{i,e[i]});
        }
        while (!q.empty()){
            node cur=q.top();
            q.pop();
            int now=cur.pos;
            int nx=w[now];
            if(vis[now]||vis[nx])continue;
            vis[now]=vis[nx]=1;
            n-=2;
            e[w[nx]]--;
            q.push(node{w[nx],e[w[nx]]});
        }
        printf("%d
    ",n);
        return 0;
    }
  • 相关阅读:
    PCI配置空间与IO空间与内存空间
    python读配置文件,根据配置文件内容改写二进制文件
    python参数的传递机制
    python复制、移动文件到指定文件夹
    python解析配置文件
    python struct用法
    Python 字符串前面加u,r,b的含义
    shell算数运算符
    三、shell -break、continue、exit、return
    shell-逻辑判断
  • 原文地址:https://www.cnblogs.com/czy-power/p/11266384.html
Copyright © 2020-2023  润新知