• Source
    1. #include<bits/stdc++.h>
    2. #define MAX 103
    3.  
    4. using namespace std;
    5.  
    6. vector<int>graph[MAX];
    7.  
    8. map<string,int>mp;
    9.  
    10. map<int,string>mp1;
    11.  
    12. int indeg[MAX];
    13.  
    14. int main()
    15. {
    16. int node,m,i,j,v,tc=0;
    17.  
    18. string s,s1;
    19.  
    20. while(scanf("%d",&node)!=EOF)
    21. {
    22. for(i=1; i<=node; i++)
    23. {
    24. cin>>s;
    25.  
    26. mp[s] = i;
    27.  
    28. mp1[i] = s;
    29. }
    30.  
    31. scanf("%d",&m);
    32.  
    33. for(i=1; i<=m; i++)
    34. {
    35. cin>>s>>s1;
    36.  
    37. indeg[mp[s1]]++;
    38.  
    39. graph[mp[s]].push_back(mp[s1]);
    40. }
    41.  
    42. printf("Case #%d: Dilbert should drink beverages in this order:",++tc);
    43.  
    44. for(i=1; i<=node; i++)
    45. {
    46. if(indeg[i]==0)
    47. {
    48. cout<<" "<<mp1[i];
    49.  
    50. indeg[i]--;
    51.  
    52. int sz = graph[i].size();
    53.  
    54. for(j=0;j<sz;j++)
    55. {
    56. v = graph[i][j];
    57.  
    58. indeg[v]--;
    59. }
    60.  
    61. i = 0;
    62. }
    63. }
    64.  
    65. puts(".");
    66.  
    67. puts("");
    68.  
    69. for(i=0;i<=node;i++)
    70. {
    71. graph[i].clear();
    72. }
    73.  
    74. memset(indeg,0,sizeof(indeg));
    75.  
    76. mp.clear();
    77.  
    78. mp1.clear();
    79. }
    80.  
    81. return 0;
    82. }