数据结构 i_love(我喜欢)
数据结构 i_love(我喜欢)
问题描述
集训队的学长们都怪怪的,如果 A 学长喜欢 B 学长, A 就会把自己的名字改
成«I_love_<B 学长的名字>»。但是奇怪的学长们很容易移情别恋,他们经常互
相喜欢来喜欢去。现在给出 n 个学长的名字和 m 个喜欢的记录,请你输出编号为
1 的学长最后的名字。
★数据输入
输入第一行为一个正整数 n。
接下来的 n 行,每行有一个学长的名字。(由大小写字母和下划线组成,长
度小于 25)
第 n+2 行为一个正整数 m。
接下来 m 行,每行两个数 u,v。表示编号为 u 的学长喜欢编号为 v 的学长。
(1<=u,v<=n)
80%的数据 1<=n,m<=1000.
100%的数据 1<=n,m<=100000.
★数据输出
输出一个字符串,表示第一个学长最后的名字。
输入示例 | 输出示例 |
5 anonymous natalia LeBron Tanya_Romanova MikeMirzayanov 6 1 2 3 4 2 1 4 3 1 4 3 2 |
I_love_I_love_I_love_Ta nya_Romanova |
输入示例 | 输出示例 |
2 MikhailRubinchik evol_I 1 1 2 |
I_love_evol_I |
解题思路
使用like[]数组记录喜欢的人的index,使用height[]数组记录喜欢的层级(有多少个I_love_)
code
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 char names[100002][26]; 5 int like[100002]; 6 int height[100002]={0}; 7 8 int main() 9 { 10 // freopen("test.txt","r",stdin); 11 int i,j; 12 int num; 13 scanf("%d",&num); 14 getchar(); 15 16 for(i=1;i<=num;i++) 17 { 18 scanf("%s",names[i]); 19 getchar(); 20 } 21 22 int m,a,b; 23 24 for(i=1;i<=num;i++) like[i]=i; 25 scanf("%d",&m); 26 for(i=0;i<m;i++) 27 { 28 scanf("%d %d",&a,&b);//a like b 29 like[a] = like[b]; 30 height[a] = height[b]+1; 31 // for(j=1;j<=num;j++) printf("%s\n",names[like[j]]); 32 } 33 34 // printf("height = %d\n",height[1]); 35 for(i=1;i<=height[1];i++) printf("I_love_"); 36 printf("%s\n",names[like[1]]); 37 38 return 0; 39 }