首页 > 其他分享 >题解 CF916C

题解 CF916C

时间:2023-02-16 16:57:14浏览次数:48  
标签:int 题解 质数 CF916C primes 边权 define

题目大意:

要求构造一张图,并让该图满足以下条件:

  1. 有 \(n\) 个点,\(m\) 条边。
  2. 每条边的边权范围是 \([1,10^9]\)。
  3. 图中从 \(1\) 到 \(n\) 的最短路径长度是个质数。
  4. 最小生成树的边权和为质数。
  5. 没有重边和自环。

题目分析:

先用质数筛筛一遍,然后因为与生成树相关,所以不难想到先构造一颗树,然后在树上添加边权为 \(+\infty\) 的边。又因为要满足最短路径的长度为质数,所以方便起见,我们可以先构造一朵菊花,然后再在其上面加边即可。

时间复杂度 \(O(n+m)\)。

代码实现:

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define TIME_LIMIT (time_t)2e3
#define dbg(x) cerr<<#x<<": "<<x<<endl;
#define inf (int)1e9
#define MAX_SIZE (int)2e6
bitset<MAX_SIZE>nf;
int primes[MAX_SIZE];
void primeshai(int num) {
    for (int i = 2; i < num; i++) {
        if (!nf[i])
            primes[++primes[0]] = i;

        for (int j = 1; j <= primes[0] && primes[j]*i <= num; j++) {
            nf[i * primes[j]] = 1;

            if (i % primes[j] == 0)
                break;
        }
    }
}

signed main() {
    ios::sync_with_stdio(false);
#ifdef LOCAL
    freopen("in.in", "r", stdin);
    freopen("out.out", "w", stdout);
    time_t cs = clock();
#endif
    //========================================
    primeshai(MAX_SIZE);
    int m, n;
    cin >> n >> m;
    int nowsum = (n - 2) * 2;
    int lastw = primes[1];

    for (int i = 1; i <= primes[0] && primes[i] + nowsum < MAX_SIZE; i++) {
        if (!nf[nowsum + primes[i]]) {
            nowsum += primes[i];
            lastw = primes[i];
            break;
        }
    }

    cout << 2 << ' ' << nowsum << endl;
    cout << 1 << ' ' << 2 << ' ' << lastw << endl;

    for (int i = 2; i < n; i++)
        cout << 1 << ' ' << i + 1 << ' ' << 2 << endl;

    int cnt = 0;
    m -= n - 1;

    while (cnt < m) {
        for (int i = 2; i < n; i++) {
            for (int j = i + 1; j <= n; j++) {
                cout << i << ' ' << j << ' ' << inf << endl;
                cnt++;

                if (cnt >= m)
                    break;
            }

            if (cnt >= m)
                break;
        }
    }

    //========================================
#ifdef LOCAL
    fclose(stdin);
    fclose(stdout);
    time_t ce = clock();
    cerr << "Used Time: " << ce - cs << " ms." << endl;

    if (TIME_LIMIT < ce - cs)
        cerr << "Warning!! Time exceeded limit!!" << endl;

#endif
    return 0;
}

标签:int,题解,质数,CF916C,primes,边权,define
From: https://www.cnblogs.com/larry76/p/17127350.html

相关文章

  • 题解 CF277A
    题目大意:有\(n\)名员工,一共有\(m\)种语言,每名员工都会其中\(k_i\)种语言(\(m\ge\boldsymbol{k_i\ge0}\)),现规定两名员工可以交流的条件如下:两名员工会一种及以......
  • 题解 CF980B
    前言:关于原题目中的“旅馆”这一用词,个人感觉用起来十分不畅,于是下文中将会用“障碍物”一词来代指旅馆。题目大意:有一座\(4\timesn\)的矩阵,然后让你放置障碍物......
  • MASA Stack 1.0 发布会 —— 社区问题解答
    MASAStack1.0圆桌讨论Q1: 全职开源的团队,你们的收入是什么?1.首先感谢我们的金主朗诗德公司,朗诗德是一家大型的净水器研发、生产、销售的公司,我们的产品也在朗诗德公......
  • ABC222H 题解
    很久之前我问joke3579有没有什么水黑,然后他给我了这个题。小推一波。题解看到这种东西首先找找有没有什么性质。简单分析可以得出一棵美丽的\(n\)阶二叉树一定满足如......
  • zfs 之 `label is missing` 问题解决方法.
    具体报错信息status:Oneormoredevicescouldnotbeusedbecausethelabelismissingorinvalid.Sufficientreplicasexistforthepooltocontinue......
  • abc289F 题解
    某人vp时10min口胡了这道题,然后调了两天,第一天卡在WA4,第二天WA7WA10交相辉映,心态快崩了,因此写了这篇题解。\(a=b\)处理有借鉴这篇题解。firstobservation......
  • P7468 愤怒的小N 题解
    P7468愤怒的小N题解首先发现答案等于\[\sum_{i=0}^{n-1}[cnt(i)\&1]\cdotf(i)\\\]其中\(cnt(x)\)为\(x\)在二进制表示下\(1\)的个数。考虑从高到低枚举第一个......
  • AtCoder Beginner Contest 272 题解
    AtCoderBeginnerContest272Solution目录AtCoderBeginnerContest272Solution更好的阅读体验戳此进入题面链接题面Luogu链接abcd跳了[ABC272E]AddandMex题面S......
  • [ABC272F] Two Strings 题解
    [ABC272F]TwoStringsSolution目录[ABC272F]TwoStringsSolution更好的阅读体验戳此进入题面SolutionCodeUPD更好的阅读体验戳此进入题面给定两字符串$S,T$,求......
  • CF819D Mister B and Astronomers 题解
    CF819DMisterBandAstronomersSolution目录CF819DMisterBandAstronomersSolution更好的阅读体验戳此进入题面SolutionCodeUPD更好的阅读体验戳此进入题面存在......