通过海量题库、编程比赛和实时排名,系统化提升您的编程能力。
"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]
已知类模板Test的定义,针对foo函数的类外定义中语
在函数中,可以用auto、extern、registe
编写代码,输出 1~100 的所有素数。参考答案:
某科学实验中,需要使用大量的整型参数,为了在保证表数精
请编写一个函数fun,它的功能是:找出一堆整型数组元素
软件详细设计产生的图如下图所示,则该图是( )。
有以下程序:程序运行后的输出结果是( )。
有以下程序:程序运行后的输出结果是 。
已知x=[3],那么执行x+=[5]之后x的值为___
将/home/ixdba目录做归档压缩,压缩后生成ix
在Linux系统下,第二个IDE通道的硬盘(从盘)被标
若URL地址为http://www.nankai.ed
Linux命令的基本语法是( )
如何停止一台机器的telnet服务?
关系数据库的实体完整性规则规定基本关系的 都不能
关系代数中专门的关系运算包括: 、投影、连接和除法。
MySQL默认情况下事务是自动提交的,关闭事务的自动提
一个事务中所有对数据库操作是一个不可分割的操作序列,这
下面程序的时间复杂度为。
当采用分块查找时,数据的组织方式为
一个C程序的执行是从本程序文件的第一个函数开始,到本程
在C语言中,格式输入操作是由库函数(只写函数名)___
功能:编写函数fun(int m)求1000以内(不包
以下叙述中正确的是( )。
一只小猪要买 N件物品 (N 不超过 1000)。它要
(打印月历)输入月份 m(1≤m≤12),按一定格式打
在一个无向图中,如果任意两点之间都存在路径相连,则称其
输入: 123 321输出: _________
(最大连续子段和)给出一个数列(元素个数不多于 100
输出: ___________
更多选择题
更多填空题
第十章 C++流
第九章 C++模板
第八章 C++运算符重载
C++语言程序设计真题5
C++语言程序设计真题4
C++语言程序设计真题3
C++语言程序设计真题2