通过海量题库、编程比赛和实时排名,系统化提升您的编程能力。
"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]
如果线程正处于运行状态,则它可能到达的下一个状态是(
下列数据结构中,属于非线性结构的是( )。
使用 turtle 库的 turtle.fd函数和
编写代码,获得用户输入的一个整数,计算其平方和立方并输
下面选项中的程序段,没有编译错误的是。
请编写一个函数fun,他的功能是:根据以下公式求 π的
在软件生命周期中,能准确地确定软件系统必须做什么和必须
设循环队列为Q(1:m),其初始状态为front=re
下列叙述中正确的是( )。
有以下程序程序运行后的输出结果是( )。
有以下程序(其中k的初值为八进制数):程序运行后的输出
以下选项中不能生成一个空字典的是( )。
Python字典和集合属于无序序列。( )
任意长度的Python列表、元组和字符串中最后一个元素
已知列素x=[1,2],执行语句 y=x后,表达式id
函数swap(int x,int y)可完成对x和y值
以下程序的功能是
设有定义:"long x=123450L;",则以下能
Linux系统下经常使用的两种桌面环境是:____
要显示内存用量用什么命令?
在底半技术中把一个中断处理分为哪几部分?为什么采用这种
MYSQL只有满足联接条件的记录才包含在查询结果中,这
MySQL默认情况下事务是自动提交的,关闭事务的自动提
若线性表最常用的操作是存取第i个元素及其前驱的值,则采
有实现xxy的两个C语言函数如下:unsigned u
假设输入的 n、m 均是不超过 100 的正整数,输出
功能:求出二维数组外围元素之和,作为函数值返回。二维数
有以下程序程序的输出结果是
假设输入的n 和 m都是正整数,x和 y都是在 [1,
输入:Hello, my name is Lostmo
更多选择题
更多填空题
第十章 C++流
第九章 C++模板
第八章 C++运算符重载
C++语言程序设计真题5
C++语言程序设计真题4
C++语言程序设计真题3
C++语言程序设计真题2