洛谷P2814 家谱
P2814 家谱
题目背景
现代的人对于本家族血统越来越感兴趣。
题目描述
给出充足的父子关系,请你编写程序找到某个人的最早的祖先。
输入输出格式
输入格式:
输入由多行组成,首先是一系列有关父子关系的描述,其中每一组父子关系中父亲只有一行,儿子可能有若干行,用#name的形式描写一组父子关系中的父亲的名字,用+name的形式描写一组父子关系中的儿子的名字;接下来用?name的形式表示要求该人的最早的祖先;最后用单独的一个$表示文件结束。
输出格式:
按照输入文件的要求顺序,求出每一个要找祖先的人的祖先,格式:本人的名字+一个空格+祖先的名字+回车。
输入输出样例
#George
+Rodney
#Arthur
+Gareth
+Walter
#Gareth
+Edward
?Edward
?Walter
?Rodney
?Arthur
$
Edward Arthur
Walter Arthur
Rodney George
Arthur Arthur
说明
规定每个人的名字都有且只有6个字符,而且首字母大写,且没有任意两个人的名字相同。最多可能有1000组父子关系,总人数最多可能达到50000人,家谱中的记载不超过30代。
/*
感觉这题应该是noipT1难度,hash成一个数然后当成一个点记录出度,因为一个人的父亲只可能有一个,所以直接模拟即可,但是最后两个点TLE
*/
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define mod 2333333
int cnt,map[],du[],to[];
bool vis[];
char s[][],ch[];
int ha(char c[]){
int res=;
for(int i=;i<=;i++)
res=(res*%mod+(ch[i]-'A'+)*%mod)%mod;
return res;
}
int main(){
//freopen("Cola.txt","r",stdin);
scanf("%s",ch);
int now,cur;
while(){
if(ch[]=='$')break;
cur=ha(ch);
if(!vis[cur]){
cnt++;
for(int i=;i<;i++)s[cnt][i]=ch[i+];
map[cur]=cnt;
vis[cur]=;
}
if(ch[]=='#'){
int fa=cur;
while(){
scanf("%s",ch);
if(ch[]!='+')break;
int now=ha(ch);
if(!vis[now]){
cnt++;
for(int i=;i<;i++)s[cnt][i]=ch[i+];
map[now]=cnt;
vis[now]=;
}
to[now]=fa;
du[now]++;
}
}
if(ch[]=='?'){
now=ha(ch);
//map[now]=cnt;
cout<<s[map[now]]<<' ';
while(){
if(du[now]==)break;
now=to[now];
}
cout<<s[map[now]]<<endl;
scanf("%s",ch);
}
}
}
80分 TLE
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define mod 2333333
int cnt,map[],zu[];
bool vis[];
char s[][],ch[];
int ha(char c[]){
int res=;
for(int i=;i<=;i++)res=(res*+ch[i]-'A'+)%mod;
return res;
}
int main(){
scanf("%s",ch);
int now,cur;
for(int i=;i<=;i++)zu[i]=i;
while(){
if(ch[]=='$')break;
cur=ha(ch);
if(!vis[cur]){
cnt++;
for(int i=;i<;i++)s[cnt][i]=ch[i+];
map[cur]=cnt;
vis[cur]=;
}
if(ch[]=='#'){
int fa=cur;
while(){
scanf("%s",ch);
if(ch[]!='+')break;
int now=ha(ch);
if(!vis[now]){
cnt++;
for(int i=;i<;i++)s[cnt][i]=ch[i+];
map[now]=cnt;
vis[now]=;
}
zu[map[now]]=zu[map[fa]];
}
}
if(ch[]=='?'){
now=ha(ch);
cout<<s[map[now]]<<' ';
cout<<s[zu[map[now]]]<<endl;
scanf("%s",ch);
}
}
}
另附更改之后WA成50分的代码
#include<bits/stdc++.h>
using namespace std;
map<string,string>father;
string fat(string x){//找爸爸
if(x!=father[x])
father[x]=fat(father[x]);
return father[x];
}
int main(){
char k;
string f1,t;
while(){
cin>>k;
if(k=='$') break;
if(k=='#'){
cin>>f1;
if(father[f1]=="") father[f1]=f1;
continue;
}
else if(k=='+'){
cin>>t;
father[t]=f1;
}
else if(k=='?'){
cin>>t;
cout<<t<<' '<<fat(t)<<endl;
}
}
return ;
}
100分 map+并查集
洛谷P2814 家谱的更多相关文章
- 洛谷——P2814 家谱
P2814 家谱 题目背景 现代的人对于本家族血统越来越感兴趣. 题目描述 给出充足的父子关系,请你编写程序找到某个人的最早的祖先. 输入输出格式 输入格式: 输入由多行组成,首先是一系列有关父子关系 ...
- 洛谷 P2814 家谱(gen)
题目背景 现代的人对于本家族血统越来越感兴趣. 题目描述 给出充足的父子关系,请你编写程序找到某个人的最早的祖先. 输入输出格式 输入格式: 输入由多行组成,首先是一系列有关父子关系的描述,其中每一组 ...
- 洛谷 P2814 家谱
题目背景 现代的人对于本家族血统越来越感兴趣. 题目描述 给出充足的父子关系,请你编写程序找到某个人的最早的祖先. 输入输出格式 输入格式: 输入由多行组成,首先是一系列有关父子关系的描述,其中每一组 ...
- 洛谷P2814 家谱(gen)
题目背景 现代的人对于本家族血统越来越感兴趣. 题目描述 给出充足的父子关系,请你编写程序找到某个人的最早的祖先. 输入输出格式 输入格式: 输入由多行组成,首先是一系列有关父子关系的描述,其中每一组 ...
- c++并查集配合STL MAP的实现(洛谷P2814题解)
不会并查集的话请将此文与我以前写的并查集一同食用. 原题来自洛谷 原题 文字稿在此: 题目背景 现代的人对于本家族血统越来越感兴趣. 题目描述 给出充足的父子关系,请你编写程序找到某个人的最早的祖先. ...
- 家谱(gen)——洛谷P2814
#include <iostream> #include <string> #include <map> using namespace std; map < ...
- 洛谷1640 bzoj1854游戏 匈牙利就是又短又快
bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...
- 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.
没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...
- 洛谷P1108 低价购买[DP | LIS方案数]
题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...
随机推荐
- ABAP 性能优化001
红方框里那一步之行很慢,lt_iflos这个内表才200多条数据 1.关键是你from那个表有多少数据.... 注意点: 1.不要用 CORRESPONDING FIELDS OF 2.LT_IFLO ...
- SIFT算法详解(转)
原文地址 http://blog.csdn.net/pi9nc/article/details/23302075 尺度不变特征变换匹配算法详解 Scale Invariant Feature Tran ...
- HttpWebRequest的timeout和ReadWriteTimeout(转载)
公司[1]一牛人看我的代码,说我设置的timeout有误,还应该设置ReadWriteTimeout.本人很不服,于是上网查看了相关说明. HttpWebRequest httpWebRequest ...
- Flask简介
一. Python 现阶段三大主流Web框架 Django Tornado Flask 对比 1.Django 主要特点是大而全,集成了很多组件,例如: Models Admin Form 等等, 不 ...
- Quartz时SLF4J错误
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-o ...
- .gitignore文件配置:keil工程文件类型【转】
本文转载自:https://blog.csdn.net/u010160335/article/details/80043965 .gitignore源文件下载链接:git管理keil工程.gitign ...
- IOS AppStore介绍图的尺寸大小(还有一些自己被拒的分享...)
4s:640*960 5:640*1136 6:750*1334 6P:1242*2208 -------现在新版本的iTunes connect里只上传6P版本的大小就可以了,其他版本苹果会自动分辨 ...
- druid相关的时间序列数据库——也用到了倒排相关的优化技术
Cattell [6] maintains a great summary about existing Scalable SQL and NoSQL data stores. Hu [18] con ...
- javascript基础知识整理(不定时更新)
1.js中真与假的定义: 真:true,非零数字,非空字符串,非空对象 假:false,数字零,空字符串,空对象(null),undefined 2.使用for循环对json进行循环操作 for(va ...
- div靠右浮动案例
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...