1. 程式人生 > >數據結構 i_love(我喜歡)

數據結構 i_love(我喜歡)

正整數 數組 bsp getchar rom 字母 一行 [] 行為

數據結構 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 }

數據結構 i_love(我喜歡)