题目信息

题目类型
提高级
题目年份
2023
题目题型
综合题
关 键 词
第k小路径

题目题干

第 19 题

1.

(第 kk 小路径)给定一张 n 个点 m条边的有向无环图,定点编号从 0到n−1,对于一条路径,我们定义“路径序列”为该路径从起点出发依次经过的顶点编号构成的序列。求所有至少包含一个点的简单路径中,“路径序列”字典序第 k小的路径。保证存在至少 k 条路径。上述参数满足 第 19 题 1. (第 k 小路径)给定一张 n 个点 m条边的有向无环图,定点编号从 0到n−1,对于一条路径,我们定义“路径序列”为该路径从起点出发依次经过的顶点编号构成的序列。求所有至少包含一个点的简单路径中,“路径序列”字典序第 k小的路径。保证存在至少 k 条路径。上述参数满足 。  在程序中,我们求出从每个点出发的路径数量。超过 的数都用  表示。然后我们根据 kk 的值和每个顶点的路径数量,确定路径的起点,然后可以类似地依次求出路径中的每个点。  试补全程序。  #include <iostream>  #include <algorithm>  #include <vector>    const int MAXN = 100000;  const long long LIM = 1000000000000000000ll;    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 (int i = 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 (int i = 0; i < n; ++i)          if (!deg[i]) Q.push_back(i);      for (int i = 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;  }  ①处应填()  ②处应填()  ③处应填()  ④处应填()  ⑤处应填()   1.  A. k >= f[u]  B. k <= f[u]  C. k > f[u]  D. k < f[u] 2.  A. deg[v] == 1 B. deg[v] == 0  C. deg[v] > 1  D. deg[v] > 0 3. A. std::min(f[u] + f[v], LIM)   B. std::min(f[u] + f[v] + 1, LIM)   C. std::min(f[u] * f[v], LIM)   D. std::min(f[u] * (f[v] + 1), LIM) 4. A. u != -1  B. !E[u].empty()  C. k > 0  D. k > 1 5. A. K+=f[u]  B. k-=f[u]   C. --k   D. ++kWU3100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

在程序中,我们求出从每个点出发的路径数量。超过 第 19 题 1. (第 k 小路径)给定一张 n 个点 m条边的有向无环图,定点编号从 0到n−1,对于一条路径,我们定义“路径序列”为该路径从起点出发依次经过的顶点编号构成的序列。求所有至少包含一个点的简单路径中,“路径序列”字典序第 k小的路径。保证存在至少 k 条路径。上述参数满足 。  在程序中,我们求出从每个点出发的路径数量。超过 的数都用  表示。然后我们根据 kk 的值和每个顶点的路径数量,确定路径的起点,然后可以类似地依次求出路径中的每个点。  试补全程序。  #include <iostream>  #include <algorithm>  #include <vector>    const int MAXN = 100000;  const long long LIM = 1000000000000000000ll;    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 (int i = 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 (int i = 0; i < n; ++i)          if (!deg[i]) Q.push_back(i);      for (int i = 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;  }  ①处应填()  ②处应填()  ③处应填()  ④处应填()  ⑤处应填()   1.  A. k >= f[u]  B. k <= f[u]  C. k > f[u]  D. k < f[u] 2.  A. deg[v] == 1 B. deg[v] == 0  C. deg[v] > 1  D. deg[v] > 0 3. A. std::min(f[u] + f[v], LIM)   B. std::min(f[u] + f[v] + 1, LIM)   C. std::min(f[u] * f[v], LIM)   D. std::min(f[u] * (f[v] + 1), LIM) 4. A. u != -1  B. !E[u].empty()  C. k > 0  D. k > 1 5. A. K+=f[u]  B. k-=f[u]   C. --k   D. ++k的数都用 第 19 题 1. (第 k 小路径)给定一张 n 个点 m条边的有向无环图,定点编号从 0到n−1,对于一条路径,我们定义“路径序列”为该路径从起点出发依次经过的顶点编号构成的序列。求所有至少包含一个点的简单路径中,“路径序列”字典序第 k小的路径。保证存在至少 k 条路径。上述参数满足 。  在程序中,我们求出从每个点出发的路径数量。超过 的数都用  表示。然后我们根据 kk 的值和每个顶点的路径数量,确定路径的起点,然后可以类似地依次求出路径中的每个点。  试补全程序。  #include <iostream>  #include <algorithm>  #include <vector>    const int MAXN = 100000;  const long long LIM = 1000000000000000000ll;    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 (int i = 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 (int i = 0; i < n; ++i)          if (!deg[i]) Q.push_back(i);      for (int i = 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;  }  ①处应填()  ②处应填()  ③处应填()  ④处应填()  ⑤处应填()   1.  A. k >= f[u]  B. k <= f[u]  C. k > f[u]  D. k < f[u] 2.  A. deg[v] == 1 B. deg[v] == 0  C. deg[v] > 1  D. deg[v] > 0 3. A. std::min(f[u] + f[v], LIM)   B. std::min(f[u] + f[v] + 1, LIM)   C. std::min(f[u] * f[v], LIM)   D. std::min(f[u] * (f[v] + 1), LIM) 4. A. u != -1  B. !E[u].empty()  C. k > 0  D. k > 1 5. A. K+=f[u]  B. k-=f[u]   C. --k   D. ++k 表示。然后我们根据 kk 的值和每个顶点的路径数量,确定路径的起点,然后可以类似地依次求出路径中的每个点。WU3100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

试补全程序。WU3100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

  1. #include <iostream> 
  2. #include <algorithm> 
  3. #include <vector> 
  4.  
  5. const int MAXN = 100000; 
  6. const long long LIM = 1000000000000000000ll; 
  7.  
  8. int n, m, deg[MAXN]; 
  9. std::vector<int> E[MAXN]; 
  10. long long k, f[MAXN]; 
  11.  
  12. int next(std::vector<int> cand, long long &k) { 
  13.     std::sort(cand.begin(), cand.end()); 
  14.     for (int u : cand) { 
  15.         if (①) return u; 
  16.         k -= f[u]; 
  17.     } 
  18.     return -1; 
  19.  
  20. int main() { 
  21.     std::cin >> n >> m >> k; 
  22.     for (int i = 0; i < m; ++i) { 
  23.         int u, v; 
  24.         std::cin >> u >> v; // 一条从u到v的边 
  25.         E[u].push_back(v); 
  26.         ++deg[v]; 
  27.     } 
  28.     std::vector<int> Q; 
  29.     for (int i = 0; i < n; ++i) 
  30.         if (!deg[i]) Q.push_back(i); 
  31.     for (int i = 0; i < n; ++i) { 
  32.         int u = Q[i]; 
  33.         for (int v : E[u]) { 
  34.             if (②) 
  35.                 Q.push_back(v); 
  36.             --deg[v]; 
  37.         } 
  38.     } 
  39.     std::reverse(Q.begin(), Q.end()); 
  40.     for (int u : Q) { 
  41.         f[u] = 1; 
  42.         for (int v : E[u]) 
  43.             f[u] = ③; 
  44.     } 
  45.     int u = next(Q, k); 
  46.     std::cout << u << std::endl; 
  47.     while (④) { 
  48.         ⑤; 
  49.         u = next(E[u], k); 
  50.         std::cout << u << std::endl; 
  51.     } 
  52.     return 0; 
  1. ①处应填()WU3100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

  2. ②处应填()WU3100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

  3. ③处应填()WU3100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

  4. ④处应填()WU3100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

  5. ⑤处应填()WU3100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
     WU3100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

1.WU3100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
 WU3100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
WU3100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
WU3100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
WU3100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
WU3100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
WU3100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
WU3100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
2.WU3100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
 WU3100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
WU3100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
 WU3100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
 WU3100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
3.WU3100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
WU3100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
WU3100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
 WU3100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
WU3100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
 WU3100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
WU3100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
 WU3100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
4.WU3100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
WU3100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
WU3100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
WU3100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
WU3100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
WU3100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
WU3100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
WU3100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
5.WU3100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
WU3100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
WU3100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
WU3100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
WU3100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
 WU3100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
WU3100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
 ++k

答案解析

相关题目

第 4 题    种树(tree) 【题目描述】 你是一个森林养护员,有一天,你接到了一个任务:在一片森林内的地块上种树,并养护至树木长到指定的高度。 森林的地图有n片地块,其中1号地块连接森林
第 3 题    结构体(struct) 【题目背景】 在C++等高级语言中,除了int和float等基本类型外,通常还可以自定义结构体类型。在本题当中,你需要模拟一种类似C++的高级语言的结构体
第 2 题    消消乐(game) 【题目描述】 小L现在在玩一个低配版本的消消乐,该版本的游戏是一维的,一次也只能消除两个相邻的元素。 现在,他有一个长度为n且仅由小写字母构成的字符串。我们
第 1 题    密码锁(lock) 【题目描述】 小Y有一把五个拨圈的密码锁。如图所示,每个拨圈上是从0到9的数字。每个拨圈都是从0到9的循环,即9拨动一个位置后可以变成0或8, 图1:密
第 20 题 2.(最大值之和)给定整数序列 ,求该序列所有非空连续子序列的最大值之和。上述参数满足  。一个序列的非空连续子序列可以用两个下标 l和 r(其中 0≤l≤r<n)表示,对应的序列
第 19 题 1. (第 k 小路径)给定一张 n 个点 m条边的有向无环图,定点编号从 0到n−1,对于一条路径,我们定义“路径序列”为该路径从起点出发依次经过的顶点编号构成的序列。求所有至少包含一
第 18 题 3. #include <vector>  #include <algorithm>  #include <iostream>    using na
第 17 题 2. #include <iostream>  #include <cmath>  #include <vector>  #include <a
第 16 题 1. #include <iostream>  using namespace std;  unsigned short f(unsigned short x) {     
第15题 现在用如下代码来计算下xn,其时间复杂度为() double quick_power(double x, unsigned n){  If(n == 0) return 1;  If(n =

提示声明

  • 免责声明:本站资源均来自网络或者用户投稿,仅供用于学习和交流:如有侵权联系删除!
  • 温馨提示:本文属于积分文章,需要充值获得积分或升级VIP会员,也可在会员中心投稿获取。

猜你喜欢