题目链接: http://codeforces.com/problemset/problem/780/E

题意: 给出一个 n 个点 m 条边的图, 有 k 个人, 初始位置可以为任意位置, 每个人最多不能经过超过 ceil(2 * n / k) 个顶点. 要使 k 个人经历所有顶点, 并输出 k 个人经历的顶点数目和路径.

思路: 先 dfs 遍历一下图, 并记录路径 (回溯路径也要记录). 然后再将路径按条件分配给 k 个人即可.

代码:

 #include <iostream>
#include <stdio.h>
#include <vector>
using namespace std; const int MAXN = 2e5 + ;
vector<int> vt[MAXN];
int vis[MAXN], path[MAXN << ];
int indx = ; void dfs(int x){
vis[x] = ;
path[++indx] = x;
for(int i = ; i < vt[x].size(); i++){
if(!vis[vt[x][i]]){
dfs(vt[x][i]);
path[++indx] = x;
}
}
} int main(void){
int n, m, k, x, y;
scanf("%d%d%d", &n, &m, &k);
for(int i = ; i < m; i++){
scanf("%d%d", &x, &y);
vt[x].push_back(y);
vt[y].push_back(x); }
dfs();
int cnt = ( * n + k - ) / k;
for(int i = ; i < k; i++){
int cc = min(cnt, indx);
if(!cc){
printf("1 1\n");
continue;
}
printf("%d ", cc);
for(int j = ; j < cc && indx; j++,indx--){
printf("%d ", path[indx]);
}
puts("");
}
return ;
}

最新文章

  1. awk神器
  2. Sqlserver 函数
  3. [资源]PHP使用消息队列
  4. unbuntu下安装flash插件
  5. 【轻院热身赛】级数求和、进制转换、candy
  6. Docker的简单认知
  7. IE浏览器下使用AJAX登陆接口请求缓存与登陆不了的问题解决
  8. swift 3.0 基础练习 面向对象 类
  9. Android 开发笔记___DateUtil——Time
  10. dnc开源梦之队2018 开源项目精选集
  11. javascript最全最好的判断数组的方法
  12. JS 将值插入数组中
  13. Linux kernel Programming - Concurrency and Race Conditions
  14. 设置cookie,获取cookie,删除cookie,修改cookie
  15. springboot retry
  16. 005.FTP本地用户访问
  17. inux下使用自带mail发送邮件告警
  18. CSS学习笔记(11)--Flex 布局教程:语法篇
  19. LCS最长共同子序列
  20. java的foreach,后台弹框

热门文章

  1. Fchart
  2. 分享知识-快乐自己:Shrio 案例Demo概述
  3. Using SMOTEBoost(过采样) and RUSBoost(使用聚类+集成学习) to deal with class imbalance
  4. sqlserver 新建只读权限用户
  5. poj-2420 A Star not a Tree?(模拟退火算法)
  6. 解决苹果手机Safari浏览器下 字体显示为 蓝色的 问题
  7. ACM学习历程—HDU5637 Transform(数论 &amp;&amp; 最短路)
  8. [转]由Tencent://Message协议想到的一个解决方案
  9. python setuptools安装
  10. 问题7:如何实现用户的历史记录功能(最多n条)