
【并查集】家谱
发布日期:2021-05-07 22:49:10
浏览次数:19
分类:精选文章
本文共 941 字,大约阅读时间需要 3 分钟。
洛谷【P2814】
给出充足的父子关系,请你编写程序找到某个人的最早的祖先。Input
输入由多行组成,首先是一系列有关父子关系的描述,其中每一组父子关系中父亲只有一行,儿子可能有若干行,用#name的形式描写一组父子关系中的父亲的名字,用+name的形式描写一组父子关系中的儿子的名字;接下来用?name的形式表示要求该人的最早的祖先;最后用单独的一个$表示文件结束。
Output
按照输入文件的要求顺序,求出每一个要找祖先的人的祖先,格式:本人的名字+一个空格+祖先的名字+回车。
不管,我就是不用map!!!校网TLE是因为评测机卡!!!
将字符串以序号,然后普通并查集。#include#include #include #include using namespace std;int t,ff,z,f[50001];char c;string ss,s;int find(int d){ if(f[d]!=d) f[d]=find(f[d]); return f[d];}int fa(string ls){ //寻找ls是第几个 int kk=ss.find(ls); if(kk<0){ //如果没有,存下来。 ss+=ls; ++t; f[t]=t; } else return kk/6+1; //不然输出他是第几个(因为名字长度固定为6位) return t;}int main(){ c=getchar(); while(c!='$'){ while(c!='#'&&c!='+'&&c!='?'&&c!='$') c=getchar(); if(c=='$') break; if(c=='#'){ cin>>s; ff=fa(s); } else{ cin>>s; z=fa(s); if(c=='+') f[find(z)]=find(ff); //合并 else if(c=='?') cout< <<' '<<
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2025年03月23日 16时17分19秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Scala教程之:函数式的Scala
2021-05-09
java中DelayQueue的使用
2021-05-09
线程stop和Interrupt
2021-05-09
Android中定时执行任务的3种实现方法
2021-05-09
nodejs中npm常用命令
2021-05-09
基于Vue2.0+Vue-router构建一个简单的单页应用
2021-05-09
基于vue2.0实现仿百度前端分页效果(二)
2021-05-09
JS魔法堂:函数重载 之 获取变量的数据类型
2021-05-09
时间序列神器之争:Prophet VS LSTM
2021-05-09
SpringBoot中关于Mybatis使用的三个问题
2021-05-09
MapReduce实验
2021-05-09
Leaflet 带箭头轨迹以及沿轨迹带方向的动态marker
2021-05-09
java大数据最全课程学习笔记(1)--Hadoop简介和安装及伪分布式
2021-05-09
java大数据最全课程学习笔记(2)--Hadoop完全分布式运行模式
2021-05-09
大部分程序员还不知道的 Servelt3 异步请求,原来这么简单?
2021-05-09
[apue] popen/pclose 疑点解惑
2021-05-09
[apue] getopt 可能重排参数
2021-05-09
移动互联网恶意软件命名及分类
2021-05-09
adb shell am 的用法
2021-05-09