通过海量题库、编程比赛和实时排名,系统化提升您的编程能力。
"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]
下列程序的输出结果是。
以下程序(int m=5; if(m++>5) cou
支持子程序调用的数据结构是( )。
(读者自行创建,注意每行第一个逗号后面有空格),其内容
假设某系统使用时间片轮转调度算法进行CPU 调度,时间
下列叙述中正确的是( )。
有以下程序:程序运行的结果是( )。
尽管可以使用import语句一次导入任意多个标准库或扩
把网络分为电路交换网、报文交换网、分组交换网属于按(
给定程序中,函数fun的功能是:将N╳N矩阵主对角线元
某文件的权限为:drw-r--r--,用数值形式表示该
论述实时信号、非实时信号、可靠信号、不可靠信号四个概念
在SQL中,用 ____命令可以存储表中的内容,即事物
在数据库的并发控制中,常用的封锁类型有两种,分别是排它
专门的关系运算包括:选择、投影、连接和( )。
对无序表用二分法查找比顺序查找快。
(15 分)已知无向连通图 G 由顶点集 V 和边集
现有 5 个操作 A、B、C、D和E操作 C必须在 A
当a=3,b=2,c=1时,执行以下程序段后b=___
执行下面程序段后,i的值是( )。
请补充函数proc,其功能是:计算下面公式S的值:例如
下面描述中正确的是
(分数背包)小 S 有 n 块蛋糕,编号从 1 到 n
(交通中断)有一个小国家,国家内有 n座城市和 m条双
输入 :3AB:ACDEbFBkBDAR:ACDBrT
输入:83 2 5 11 12 7 4 10输出:__
输入: 90 120 输出: _______
输出 :___________________
二叉树 T,已知其先根遍历是 1 2 4 3 5 7
以下断电之后仍能保存数据的有( )。
更多选择题
更多填空题
第十章 C++流
第九章 C++模板
第八章 C++运算符重载
C++语言程序设计真题5
C++语言程序设计真题4
C++语言程序设计真题3
C++语言程序设计真题2