FZU2057——dfs——家谱
由于计划生育的实行,我们以及将来几代人都会是独生子女,即每对夫妇只会有一个孩子。那么给你XXXX年某人的一张树形族谱,你能指出其中任意两人的关系吗?
Input
输入数据第一行一个整数T表示有T组数据。
每组数据第一行一个正整数N (2 < N < 10000 ,且N为奇数),表示族谱中有N个家族成员。
接下来N/2行,每行三个整数a b c,表示a的父亲是b,a的母亲是c。数据保证所给的是一棵树,家族成员的编号为1到N。
接下来一行一个正整数M (0 < M < 100),表示有M询问。
接下来M行,每行两个整数x y (x!=y),表示询问x y的关系。
Output
对于每一个询问,输出一行。
若x是y的祖辈,则输出:
0 S
若y是x的祖辈,则输出:
1 S
若都不是以上两种情况,则输出:
Relative
前两种情况中的S表示一个由大写字母F和M组成的字符串,F表示父亲,M表示母亲,表示前者是后者的XXX。例如:
0 FMM 表示x是y的父亲的母亲的母亲。
1 MFMF 表示y是x的母亲的父亲的母亲的父亲。
以此类推。
Sample Input
1 9 3 6 7 5 8 9 1 2 3 2 4 5 3 8 2 1 7 3 9
Sample Output
0 MF 1 MM Relative
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | /* 临接表 head:结点编号 E:边的编号 t[i].next:与结点u所有相连的点的边的编号 用path在dfs的时候记录下状态 */ #include<cstdio> #include<cstring> #include<algorithm> #include<vector> using namespace std; const int MAX = 10000 + 10; int head[MAX]; int path[MAX]; int E, ans; int G[MAX]; struct edge{ int v, w, next; }t[MAX]; void add( int u, int v, int w) { t[E].v = v; t[E].w = w; t[E].next = head[u]; head[u] = E++; } int dfs( int u, int fd, int step) { if (u == fd) { ans = step; for ( int i = 0; i < step; i++) G[i] = path[i]; return true ; } for ( int i = head[u]; i != -1; i = t[i].next){ int v = t[i].v; path[step] = t[i].w; if (dfs(v, fd, step + 1)) return true ; } return false ; } int main() { int n, m, a, b, c; int T; scanf ( "%d" , &T); while (T--){ memset (head, -1, sizeof (head)); memset (t, 0, sizeof (t)); scanf ( "%d" , &n); E = 0; for ( int i = 1; i <= n/2 ;i++){ scanf ( "%d%d%d" , &a, &b, &c); add(a, b, 0); add(a, c, 1); } scanf ( "%d" , &m); int x, y; for ( int i = 1; i <= m ; i++){ scanf ( "%d%d" , &x, &y); if (dfs(x, y, 0)) { printf ( "1 " ); for ( int j = 0 ; j < ans; j++){ printf ( "%c" , G[j] ? 'M' : 'F' ); } } else if (dfs(y, x, 0)){ printf ( "0 " ); for ( int j = 0 ; j < ans; j++){ printf ( "%c" , G[j] ? 'M' : 'F' ); } } else { printf ( "Relative" ); } puts ( "" ); } } return 0; } |
分类:
DFS
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
· ThreeJs-16智慧城市项目(重磅以及未来发展ai)
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
· Ai满嘴顺口溜,想考研?浪费我几个小时
· Browser-use 详细介绍&使用文档
· 软件产品开发中常见的10个问题及处理方法