zoukankan      html  css  js  c++  java
  • [SCOI2016]萌萌哒

    题目

    原题链接

    解说

    叫萌萌哒其实恶心得很……

    引自https://www.luogu.com.cn/blog/emptyset/solution-p3295

    代码

    #include<bits/stdc++.h> 
    using namespace std;
    const int maxn = 100005, mod = 1000000007;
    int n, m, fa[maxn][18], ans;
    int find(int x, int k) {
    	if(fa[x][k]==x) return x;
    	return fa[x][k]=find(fa[x][k],k);
    }
    void merge(int x, int y, int k) {
        x = find(x, k), y = find(y, k);
        if(x != y) fa[x][k] = y;
    }
    int main() {
        scanf("%d %d", &n, &m);
        const int maxk = floor(log2(n));
        for(int i = 1; i <= n; ++i)
            for(int k = 0; k <= maxk; ++k)
                fa[i][k] = i;           
        for(int i = 1, l1, r1, l2, r2; i <= m; ++i) {
            scanf("%d %d %d %d", &l1, &r1, &l2, &r2);
            for(int k = maxk; ~k; --k)
                if(l1+(1<<k)-1 <= r1) merge(l1, l2, k), l1 += 1<<k, l2 += 1<<k;
        }   
        for(int k = maxk; k; --k){
            for(int i = 1; i+(1<<k)-1 <= n; ++i) {
                int pos = find(i, k);
                merge(i, pos, k-1), merge(i+(1<<k-1), pos+(1<<k-1), k-1);
            }
        }
        for(int i = 1; i <= n; ++i)
            if(fa[i][0] == i) ans = !ans ? 9 : ans * 10ll % mod;
        printf("%d", ans);
        return 0;
    }
    

    幸甚至哉,歌以咏志。

  • 相关阅读:
    SED{shell三剑客awk,sed,grep}
    AWK{shell三剑客awk,sed,grep}
    面试汇总
    shell脚本
    redis主从
    haproxy
    grafana
    zabbix
    lnmp
    shell 基础
  • 原文地址:https://www.cnblogs.com/DarthVictor/p/12827494.html
Copyright © 2011-2022 走看看