首页 > 其他分享 >Fox and Minimal path 题解

Fox and Minimal path 题解

时间:2023-09-15 13:00:11浏览次数:40  
标签:int 题解 Fox tot add num len path include

Fox and Minimal path

题目大意

构造一张无向图,使得从 \(1\) 到 \(2\) 的最短路数量为 \(k\)。

思路分析

我们首先可以发现当 \(k = 2^t\) 时的构造方式:

其中只有 \(O(\log k)\) 个点。

当 \(k\not = 2^t\) 时,我们可以将 \(k\) 二进制拆分,对于每一个二进制位重复上述操作,就可以得到:

当然,为了保证最短路长度相同,少的部分需要用一条链补齐。

算一下发现点数为 \(O(\log^2k)\),当 \(k\) 达到极限数据 \(2^{29}-1\) 时点数会超过 \(1000\),无法通过。

我们发现,那些用链补齐的部分是相当浪费的,也就是说,我们可以将所有用于补齐的链合并成一条:

这样我们的点数虽然依然是 \(O(\log^2 k)\) 的,但减少了一部分点,在极限数据时只需要 \(900\) 个点,可以通过。

代码

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
 
using namespace std;
const int N = 2010, M = 50;
#define inf 0x3f3f3f3f
 
int n, k, len, tot = 3;
int G[N][N], a[M], need[M];
 
void add(int u, int v){
    G[u][v] = G[v][u] = 1;
}
 
void solve(int x){
    int num = tot;
    if (x == 0) {
        add(num, num + 1);
        add(num + 1, num + 2);
        add(num + 2, num + 3);
        tot += 3;
        if (x == len - 1) add(num + 3, 2);
        else add(num + 3, need[len - 3]);
        return ;
    }
    if (x == 1) {
        add(num, num + 1);
        add(num, num + 2);
        add(num + 1, num + 3);
        add(num + 2, num + 4);
        add(num + 3, num + 5);
        add(num + 4, num + 5);
        tot += 5;
        if (x == len - 1) add(num + 5, 2);
        else add(num + 5, need[len - 3]);
        return ;
    }
    add(num, num + 1);
    add(num, num + 2);
    tot += 2;
    for (int i = 1; i < x; i ++) {
        add(tot - 1, tot + 1);
        add(tot - 1, tot + 2);
        add(tot, tot + 1);
        add(tot, tot + 2);
        tot += 2;
    }
    add(tot - 1, tot + 1);
    add(tot, tot + 1);
    tot ++;
    add(tot, need[len - x - 1]);
}
 
int main(){
    cin >> k;
    while (k) {
        a[++ len] = (k & 1);
        k >>= 1;
    }
    for (int i = 1; i <= len; i ++) add(tot, tot + 1), tot ++;
    add(tot, 2);
    need[0] = 2;
    for (int i = 1; i <= len; i ++) need[len - i + 1] = i + 3;
    for (int i = 1; i <= len; i ++)
        if (a[i]) {
            add(1, ++ tot);
            solve(i - 1);
        }
    printf("%d\n", tot);
    for (int i = 1; i <= tot; i ++) {
        for (int j = 1; j <= tot; j ++) 
            printf("%c", G[i][j] ? 'Y' : 'N');
        printf("\n");
    }    
    return 0;
}

标签:int,题解,Fox,tot,add,num,len,path,include
From: https://www.cnblogs.com/TKXZ133/p/17704794.html

相关文章

  • linux 中 readlink、realpath、find输出软链接文件绝对路径的差异
     001、[root@pc1test1]#ls##三个测试文件a.txtb.txttestfile[root@pc1test1]#ll-htotal4.0Klrwxrwxrwx.1rootroot20Sep1612:03a.txt->/home/test1/testfilelrwxrwxrwx.1rootroot20Sep1612:03b.txt->/home/test1/testfile-rw-r--......
  • 课堂问题解答
    一、运行结果:由于浮点数在计算机内部的表示方式是有限的,所以在进行浮点数计算时可能会出现精度损失,导致结果不是准确的。在第一行代码中,计算0.05+0.01的结果,预期应该是0.06。然而,由于浮点数的精度限制,实际计算结果可能是一个近似值,例如0.060000000000000005。这就导致了打......
  • NOI 2023 题解
    CopperLoser的题解……Day1T1方格染色有一个\(n\timesm\)的网格,有\(Q\)次操作,每次形如有三种:将\((x_i+j,y_i)\)/\((x_i,y_i+j)\)/\((x_i+j,y_i+j)\)染色,其中\(j=0,1\dotsL_i-1\)。第三种操作至多只有\(5\)次,问之中有多少个格子被染过色。扫描线板子题,首先令......
  • 『题解』P6055
    给出\(N\),求:\[\sum_{i=1}^N\sum_{j=1}^N\sum_{p=1}^{\lfloor\frac{N}{j}\rfloor}\sum_{q=1}^{\lfloor\frac{N}{j}\rfloor}[\gcd(i,j)=1][\gcd(p,q)=1].\]考虑化简。存在一个性质,但是我当时推的时候忘记了。即:\[\sum_{i=1}^N\sum_{j=1}^N\su......
  • 9.11CF1819 题解
    9.11CF1819题解A.ConstructiveProblem简单题,上链接:链接B.TheButcher题意有一张 \(h\timesw\) 的纸片,现在对这张纸片进行 \(n−1\) 次裁剪。每次裁剪后会将其中一半收归(即这一半不会再被裁剪)。保证纸片不会被旋转。告诉你最终裁剪后的 \(n\) 张纸片长宽,问初始......
  • Flutter插件flutter_boost 在android模块中的报红问题解决.
    1,在开发Flutter插件时,打开插件的android项目,准备编写native端的代码时,发现各种报红,代码无法跳转,体验十分不好。就像我下面的截图一样:导入了FlutterBoostflutterBoost源码爆红。但是运行正常。。这说明本身是没有问题的。。分明是没有错误的类都存在。但是就是爆红。。。。可......
  • 拼多多面试题解析:Java实现继承的七种方式!
    大家好,我是小米!今天,我要和大家一起来深入探讨一下拼多多的面试题:Java实现继承有哪7种方式?这是一个相当有深度的问题,不过别担心,我会尽力以通俗易懂的方式给大家讲解清楚,让大家对Java继承有更深刻的理解。什么是继承在Java编程中,继承是一种非常重要的概念,它允许一个类(子类/派......
  • 访问前台页面${pageContext.request.contextPath}/el表达式失效问题解决
    最近在做项目整合这个问题,然后在项目整合的时候,遇到了好多问题,这是其中一个,在此留作记录吧,虽然关键点不是我处理好的。访问前端页面,我先描述一下具体出现的现象:我访问前端jsp页面的时候,jquery文件,js,css样式等都会失效,也就是没有引入到jsp页面当中。查看浏览器console的时候,发现${pa......
  • C# 根据path递规创建文件夹
    使用场景很多,只要是要创建文件就要。所以写了一个。以后到处用就是了。///<summary>///根据path递规创建文件夹///</summary>///<paramname="filePath"></param>///<returns></returns>publicstaticboolCreateDirectoryByPath(thisstringfilePath){......
  • VMware Ubuntu18.04找不到网卡ens33问题解决
     查询网卡状态[root@localhost~]# nmcli devicestatusDEVICE   TYPE     STATE      CONNECTIONens33    ethernet unmanaged  --lo        loopback unmanaged  --上面状态提示未接管 开启网络[root@localhost~]#nmcli......