通过海量题库、编程比赛和实时排名,系统化提升您的编程能力。
"CSP考试" 试卷中 CSP-S1提高级初赛试卷[2023] 中有题目如下:
第1题
(第k小路径)给定一张.个点.条边的有向无环图,顶点编号从0到n-1。对于一条路径,我们定义"路径序列"为该路径从起点出发依次经过的顶点编号构成的序列。求所有至少包含一个点的简单路径中,“路径序列"字典序第k小的路径。保证存在至少k条路径。上述参数满足1≤n.m≤105和1≤k≤1018。
在程序中,我们求出从每个点出发的路径数量。超过1018的数都用1018表示。然后我们根据k的值和每个顶点的路径数量,确定路径的起点,然后可以类似地依次求出路径中的每个点。
试补全程序。
#include <iostream> #include <algorithm> #include <vector> const int MAXN = 100000; constlonglongLIM=100000000000000000011; int n,m,deg[MAXN]; std::vector<int> E[MAXN]; long long k,f[MAXN]; int next(std::vector<int>cand,long long &k){ std::sort(cand.begin(),cand.end()); for(int u : cand){ if (①)return u; k -= f[u]; } return -1; } int main(){ std::cin>>n>>m>>k; for(inti=0;i<m;++i){ int u, v; std::cin >>u >> v;//一条从u到v的边 E[u].push_back(v); ++deg[v]; } std::vector<int> Q; for(inti=0;i<n;++i) if (!deg[i])Q.push_back(i); for(inti=0;i<n;++i){ int u = Q[i]; for (int v : E[u]){ if (②)Q.push_back(v); --deg[v]; } } std::reverse(Q.begin(), Q.end()); for(int u : Q){ f[u]= 1; for(int v:E[u])f[u]=③; } int u = next(Q,k); std::cout << u << std::endl; while(④){ ⑤; u = next(E[u],k); std::cout << u << std::endl; } return 0; }
①处应填( )
k >= f[u]
k <= f[u]
k >f[u]
k< f[u]
所属试卷:CSP-S1提高级初赛试卷[2023]
下列语句中,错误的是。
某系统结构图如下图所示该系统结构图中最大扇入是( )。
给定程序中,函数fun的功能是计算下式:直到并把计算结
N个有序整数数列已放在一维数组中,给定下列程序中,函数
以下涉及字符串数组、字符指针的程序段,不会产生编译错误
若有定义语句char s[10]="1234567\0
请在下面程序的横线处填上适当内容,以使程序完整,并使程
表达式{1,2,3}<{1,2,4}的值为______
表达式int('123',8)的值为_________
关键字__________用于测试一个对象是否是一个可
已知x是个列表对象,那么执行语句y=x之后,对y所做的
下面程序段运行结果是( )。
将当前目录下的文件man.config 压缩为man.
执行命令 ls –l 时,某行显示如下:
下面哪种路由协议有最高的可信度
以下表示可变长度字符串的数据类型是( )
以下表达降序排序的是( )
(枚举因数)从小到大打印正整数n的所有正因数,试补全枚
假设变量a、b均为整型,表达式(a=5,b=2,a>b
有以下程序程序的运行结果是
输入 :8 4输出 :____
如下图所示,A到 B是连通的。假设删除一条细的边的代价
如右图所示,共有 13个格子。对任何一个格子进行一次操
(切割绳子)有 n条绳子,每条绳子的长度已知且均为正整
以下不属于无线通信技术的是 ( )。
T(n) 表示某个算法输入规模为 n 时的运算次数。如
本题中,我们约定布尔表达式只能包含p, q, r三个布
字符 '0' 的 ASCII 码为 48,则字符 '9
书架上有 21 本书,编号从 1 到 21 ,从其中选
在下列关于青少年信息学竞赛的说法中,你赞成的是( )
更多选择题
更多填空题
第十章 C++流
第九章 C++模板
第八章 C++运算符重载
C++语言程序设计真题5
C++语言程序设计真题4
C++语言程序设计真题3
C++语言程序设计真题2