通过海量题库、编程比赛和实时排名,系统化提升您的编程能力。
"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; }
②处应填( )
deg[v]== 1
deg[v]== o
deg[v]>1
deg[v]>o
所属试卷:CSP-S1提高级初赛试卷[2023]
有如下程序(自增、赋值相关),运行时的输出结果是
有如下程序,运行此程序输出符号?的个数是。
使用 turtle 库的 turtle.fd函数和
下列程序逆序打印所输入正整数的各位数字,例如输入134
优化数据库系统查询性能的索引设计属于数据库设计的( )
下列叙述正确的是( )。
设有如下语句则以下叙述中错误的是。
以下涉及字符串数组、字符指针的程序段,不会产生编译错误
己知x为非空列表,那么表达式x.sort==sor
Python 3.x语句for i in range
以下程序执行结果是_________。
给定程序中,函数fun的功能是用函数指针指向要调用的函
在/root文件夹下查找后缀为.cpp的文件。答:fi
在底半技术中把一个中断处理分为哪几部分?为什么采用这种
下面哪个命令可以查看网卡的中断?
Linux系统中,一般把命令 ls 定义为 ls --
在INSERT触发器中,可以引用一个名为 ______
视图是一个虚表,其本身并不存放数据,数据来源于____
关于insert语句下列说法正确的是
(8 分)某计算机用硬盘作为启动盘,硬盘第一个扇区存放
共有 8 人选修了程序设计课程,期末大作业要求由 2
执行下面程序段后,s的值是( )。
则x的值为_____。
则表达式x==y>z的值为_____。
有以下程序
某二叉树共有13个结点,其中有4个度为1的结点,则叶子
4)若输入的第一个字符串长度由 100个不同的字符构成
输出 :____
以下关于字符串的判定语句中正确的是 ( )
(笛卡尔树 )对于一个给定的两两不等的正整数序列,
更多选择题
更多填空题
第十章 C++流
第九章 C++模板
第八章 C++运算符重载
C++语言程序设计真题5
C++语言程序设计真题4
C++语言程序设计真题3
C++语言程序设计真题2