数据结构 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.
★数据输出输出一个字符串,表示第一个学长最后的名字。
输入示例 | 输出示例 |
5anonymousnataliaLeBronTanya_RomanovaMikeMirzayanov61 23 42 14 31 43 2 | I_love_I_love_I_love_Tanya_Romanova |
输入示例 | 输出示例 |
2MikhailRubinchikevol_I11 2 | I_love_evol_I |
解题思路
使用like[]数组记录喜欢的人的index,使用height[]数组记录喜欢的层级(有多少个I_love_)
code
1 #include2 #include 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