题意:每次可以选择一条路径,要求这条路径中每个点都是上一个点的子节点,求最少需要几条路径将所有点走完

思路:将每个点有没有子节点判断出来,因为只有没有子节点的点需要新增一条路,所以需要路径的最小数目就是没有子节点的节点个数,从每个根节点出发,深搜一遍即可。

注意:可以开临时vector来节约时间。

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pll;
const int N=2e5+50;
ll pre[N],vis[N];
vector<ll> q;
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
ll t;cin>>t;
while(t--){
ll n;cin>>n;
ll ans=n;
vector<ll> sum(n+1,0);
for(ll i=1;i<=n;i++){
cin>>pre[i];vis[i]=0;
if(!sum[pre[i]]) ans--;
sum[pre[i]]++;
}
if(n==1){cout<<"1"<<endl<<"1"<<endl<<"1"<<endl<<endl;continue;}
cout<<ans<<endl;
for(ll i=1;i<=n;i++){
if(!sum[i]){
ll p=i;
while(!vis[p]){
vis[p]=1;
q.push_back(p);p=pre[p];
}
cout<<q.size()<<endl;
for(ll j=q.size()-1;j>=0;j--){
cout<<q[j];
if(j!=0) cout<<" ";
else cout<<endl;
}
q.clear();
}
}
cout<<endl;
}
}

最新文章

  1. 【bzoj2060】[Usaco2010 Nov]Visiting Cows拜访奶牛
  2. js语法
  3. 查看mysql集群状态是否正常
  4. 错误:[将截断字符串或二进制数据。\r\n语句已终止。]
  5. 转载:STM32之中断与事件---中断与事件的区别
  6. new[]上面居然有一个内存计数,怪不得delete[]从来不出错
  7. Robotium学习笔记二
  8. javascript--烟火效果
  9. (转)IOS笔记 #pragma mark的用法
  10. 刘汝佳黑书 pku等oj题目
  11. external 里面文件的介绍
  12. 蓝桥杯-加法变乘法-java
  13. ELK系列~对fluentd参数的理解
  14. 【简】题解 AWSL090429 【市场】
  15. 剑指Offer-和为S的连续正数序列
  16. Mybatis pageHelper.startPage(...)是物理分页
  17. es6 新增数据类型Symbol
  18. 深度学习目标检测:RCNN,Fast,Faster,YOLO,SSD比较
  19. 解决Can &#39;t connect to local MySQL server through socket &#39;/tmp/mysql.sock &#39;(2) &quot;;
  20. git使用,多分支合并代码解决冲突,git删除远程分支,删除远程master默认分支方法

热门文章

  1. 配置nginx多域名虚拟主机
  2. VisionPro &#183; C# &#183; 界面显示视觉结果图像
  3. CODING DevOps 助力中化信息打造新一代研效平台,驱动“线上中化”新未来
  4. 入行数字IC验证后会做些什么?
  5. 由ASP.NET Core根据路径下载文件异常引发的探究
  6. MySQL数据检索时,sql查询的结果如何加上序号
  7. W10修改被改的默认打开文本方式
  8. NC24083 [USACO 2017 Dec P]Greedy Gift Takers
  9. Python调用Outlook发邮件
  10. # Vue3 setup 函数