zoukankan      html  css  js  c++  java
  • CodeForces

    CodeForces - 1209D

    题意

    现在n种点心,每种点心只有一份,有k位客人,每位客人有两种想要吃的点心,你可以安排他们进场的顺序,每位客人会吃掉所有他想要吃的,并且还没被吃掉的点心。如果客人一个也没吃到,他就会不开心,问最少的不开心的人是多少?

    思路

    刚开始以为只会吃掉一个,直接按照第一个元素大小排序,WA了。

    一直到比赛结束我都没搞清题意,赛后搜题解很懵逼,怎么和并查集扯上的关系,这不是贪心吗?

    题意读错了。。。

    第一个客人肯定是把两个都吃掉了,这时为了满足其他的客人,我们要选择的客人肯定是,他喜欢的其中一个被吃掉,另一个没被吃掉。

    就是在已知的被吃掉的点心中,寻找没被吃掉的点心,这就是并查集的思想。

    代码

    //#include<bits/stdc++.h>
    #include<stdio.h>
    #include<algorithm>
    #include<string.h>
    #include<string>
    #include<math.h>
    #define pb push_back
    using namespace std;
    typedef long long ll;
    typedef unsigned long long ull;
    const int N=1e5+10;
    const int mod=1e9+7;
    const int inf=0x3f3f3f3f;
    const double eps=1e-14;
    
    int fa[N];
    int find(int x)
    {
        if(fa[x]==x) return x;
        return fa[x]=find(fa[x]);
    }
    int main()
    {
        int n,m;
        scanf("%d%d",&n,&m);
        int ans=0;
        for(int i=1;i<=n;i++) fa[i]=i;
        for(int i=1;i<=m;i++)
        {
            int u,v;
            scanf("%d%d",&u,&v);
            int uu=find(u);
            int vv=find(v);
            if(uu==vv)
            {
                ans++;
                continue;
            }
            fa[uu]=vv;
        }
        printf("%d
    ",ans);
        return 0;
    }
    
  • 相关阅读:
    V8 下的垃圾回收机制
    数据库索引原理
    多线程的实现方法
    网元的概念
    Oracle 数据库实现数据合并:merge
    Linux账号管理
    Linux 进程管理 ps、top、pstree命令
    linux OS与SQL修改时区,系统时间
    数据库的几种模式
    linux上限值网速、限值带宽
  • 原文地址:https://www.cnblogs.com/valk3/p/12772186.html
Copyright © 2011-2022 走看看