通过海量题库、编程比赛和实时排名,系统化提升您的编程能力。
"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
++k
所属试卷:CSP-S1提高级初赛试卷[2023]
当需要将函数bool isnumber(char c)
已知枚举类型声明语句:enum COLOR{WHITE
在匹配器(Matcher)类中,用于输入字符串与模式串
给定一个 Python 源程序文件 test.py,图
下列关于虚拟文件系统(VFS)的叙述中,正确的是( )
下列程序调用函数sum计算下列级数之和:S=1+x+x
下列方法中,不属于软件调试方法的是( )。
有以下程序:程序运行的结果是( )。
有以下程序:程序运行后的输出结果是。
在C++中,混合类型表达式_________。( )
表达式[1,2,3]*3的执行结果为_______。
Python 3.x语句for i in range
下面程序段运行结果是_________。
若有定义语句:char c='\010';则变量c中包
redhat系统中,默认情况下根口令没有字符长短的的限
Linux主要采用了 和 两种动态内存管理
MYSQL用于对分组统计结果进行选择的语句是 。
ER模型是对现实世界的一种抽象,它的主要成分有分类、
栈和队列的共同点是。
已知:问语句执行后m=_____,n=_____。
则x的值为_____。
下面判断正确的是( )。
已知a=10,b=15,c=1,d=2,e=10,则表
以下程序的输出结果是( )。
给定程序BLANK1.C中,函数fun的功能是在数组中
无论是 TCP/IP 模型还是 OSI 模型,都可以视
输入: 7 4输出: _________
定义字符串的基本操作为:删除一个字符、插入一个字符和将
有人认为,在个人电脑送修前,将文件放入回收站中就是已经
完全二叉树的顺序存储方案, 是指将完全二叉树的结点从上
更多选择题
更多填空题
第十章 C++流
第九章 C++模板
第八章 C++运算符重载
C++语言程序设计真题5
C++语言程序设计真题4
C++语言程序设计真题3
C++语言程序设计真题2