zoukankan      html  css  js  c++  java
  • 【NOIP模拟】Mushroom的区间

    题面

    Mushroom 有一行数,初始时全部是 0。现在 Mushroom 有 m 个区间[L,R],他希望用以下操作得到新的序列。从 m 个给定区间中选择一个区间[s,t],把区间中的数对应元素全部翻转。(0 变1,1 变 0)。请告诉 Mushroom 他能得到多少区间。(模 10^9+7)

    分析

    看着挺复杂的,其实就是并查集。

    画一个Venn图会发现,只要一个区间不被完全包括,对答案就会有*2的贡献

    #include<bits/stdc++.h>
    using namespace std;
    #define N 100100
    #define ll long long
    #define mod 1000000007
    ll n,m,ans=1,fa[N];
    ll find(ll x) 
    {
        return x==fa[x]?x:fa[x]=find(fa[x]);
    }
    int main()
    {
        scanf("%lld%lld",&n,&m);
        for(ll i=1;i<=n;i++)fa[i]=i;
        for(ll i=1;i<=m;i++)
        {
            ll l,r;
            scanf("%lld%lld",&l,&r);
            l--;
            ll x=find(l),y=find(r);
            if(x!=y)
            {
                fa[x]=y;
                ans=ans*2%mod;
            }
        }
        printf("%lld",ans);
        return 0;
    }
    “Make my parents proud,and impress the girl I like.”
  • 相关阅读:
    多线程
    关于并发和并行
    文件系统
    java.util.Arrays类
    程序管理与SElinux
    用户和用户组管理总结
    useradd和adduser
    打印可见字符
    cmd中控制某个命令执行多少次
    keras模块之-优化器(optimizers)--笔记
  • 原文地址:https://www.cnblogs.com/NSD-email0820/p/9550218.html
Copyright © 2011-2022 走看看