CF-1675D. Vertical Paths
2024-09-18 06:12:54
题意:每次可以选择一条路径,要求这条路径中每个点都是上一个点的子节点,求最少需要几条路径将所有点走完
思路:将每个点有没有子节点判断出来,因为只有没有子节点的点需要新增一条路,所以需要路径的最小数目就是没有子节点的节点个数,从每个根节点出发,深搜一遍即可。
注意:可以开临时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;
}
}
最新文章
- 【bzoj2060】[Usaco2010 Nov]Visiting Cows拜访奶牛
- js语法
- 查看mysql集群状态是否正常
- 错误:[将截断字符串或二进制数据。\r\n语句已终止。]
- 转载:STM32之中断与事件---中断与事件的区别
- new[]上面居然有一个内存计数,怪不得delete[]从来不出错
- Robotium学习笔记二
- javascript--烟火效果
- (转)IOS笔记 #pragma mark的用法
- 刘汝佳黑书 pku等oj题目
- external 里面文件的介绍
- 蓝桥杯-加法变乘法-java
- ELK系列~对fluentd参数的理解
- 【简】题解 AWSL090429 【市场】
- 剑指Offer-和为S的连续正数序列
- Mybatis pageHelper.startPage(...)是物理分页
- es6 新增数据类型Symbol
- 深度学习目标检测:RCNN,Fast,Faster,YOLO,SSD比较
- 解决Can &#39;t connect to local MySQL server through socket &#39;/tmp/mysql.sock &#39;(2) ";;
- git使用,多分支合并代码解决冲突,git删除远程分支,删除远程master默认分支方法
热门文章
- 配置nginx多域名虚拟主机
- VisionPro &#183; C# &#183; 界面显示视觉结果图像
- CODING DevOps 助力中化信息打造新一代研效平台,驱动“线上中化”新未来
- 入行数字IC验证后会做些什么?
- 由ASP.NET Core根据路径下载文件异常引发的探究
- MySQL数据检索时,sql查询的结果如何加上序号
- W10修改被改的默认打开文本方式
- NC24083 [USACO 2017 Dec P]Greedy Gift Takers
- Python调用Outlook发邮件
- # Vue3 setup 函数