數據結構 i_love(我喜歡)
阿新 • • 發佈:2017-09-23
正整數 數組 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(我喜歡)