通过海量题库、编程比赛和实时排名,系统化提升您的编程能力。
"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]
下列关于派生类构造函数和析构函数的说法中,错误的是
在最坏情况下比较次数相同的是( )。
现有一个集合{10,3,4,23,43,12,5,33
对于现实世界中事物的特征,在实体-联系模型中使用( )
有以下程序程序运行后的输出结果是( )。
有以下程序:程序运行后的输出结果是。
以下关于C语言函数参数传递方式的叙述正确的是( )。
有以下程序:以下叙述中正确的是。
已知 x={1:2,2:3},那么表达式 x.get
已知x={1:2,2:3,3:4},那么表达式sum
已知x={'a':'b','c':'d'},那么表达式
已有变量定义语句double=5.0,p; int n
下面程序段中循环体的执行次数是___________。
有以下程序 程序运营后的输出结果是
编写shell程序,实现自动删除50个用户账号的功能。
将当前目录下的bin目录和hello、hello.c文
要显示内存用量用什么命令?
Linux内核引导时,从文件( )中读取要加载的文件
简述在虚拟机中安装Red Hat Linux 9.0
网络管理的重要任务是:_____和________。
MySQL提供的存储引擎是基于( )的。
create use创建用户时,用户帐号的格式为
在激活它的语句之前触发的是( )触发器。
SQL语句中的条件用以下哪一项来表达
数组不适合作为任何二叉树的存储结构( )
设x=4<4-!0,x的值为_____。
设栈的顺序存储空间为S(1:m),初始状态为top=m
一个 1×8的方格图形(不可旋转)用黑、白两种颜色填涂
十进制下的无限循环小数(不包括循环节内的数字均为0成均
7个同学围坐一圈,要选 2个不相邻的作为代表,有___
更多选择题
更多填空题
第十章 C++流
第九章 C++模板
第八章 C++运算符重载
C++语言程序设计真题5
C++语言程序设计真题4
C++语言程序设计真题3
C++语言程序设计真题2