fork(1) download
  1. #include <algorithm>
  2. #include <bitset>
  3. #include <climits>
  4. #include <cmath>
  5. #include <cstdio>
  6. #include <cstring>
  7. #include <deque>
  8. #include <functional>
  9. #include <iomanip>
  10. #include <iostream>
  11. #include <map>
  12. #include <queue>
  13. #include <set>
  14. #include <sstream>
  15. #include <stack>
  16. #include <string>
  17. #include <vector>
  18.  
  19. using namespace std;
  20.  
  21. int M, N;
  22. string s;
  23.  
  24. #define FOR(i, N) for(int i = 0; i < N; i++)
  25. #define FOR1e(i, N) for(int i = 1; i <= N; i++)
  26. #define REP(i, M, N) for(int i = M; i < N; i++)
  27. #define REPe(i, M, N) for(int i = M; i <= N; i++)
  28. #define sc(N) scanf("%d", &N)
  29. #define scsc(M, N) scanf("%d %d", &M, &N)
  30. #define gt(s) getline(cin, s)
  31. #define all(s) s.begin(), s.end()
  32. #define ll long long
  33. #define ull unsigned ll
  34. #define vi vector <int>
  35. #define pii pair <int, int>
  36. #define SS stringstream
  37. #define mp make_pair
  38. #define pb push_back
  39. #define PI 3.14159265
  40. #define EPS 1e-7
  41.  
  42. const int MAX = 105;
  43. const int MOD = 1000000007;
  44.  
  45. map <string, vector <string> > adj;
  46. set <string> vis;
  47. vector <string> ans;
  48.  
  49. void dfs(string node){
  50. vis.insert(node);
  51. FOR(i, adj[node].size()){
  52. string child = adj[node][i];
  53. if(vis.find(child) == vis.end())
  54. dfs(child);
  55. }
  56. ans.push_back(node);
  57. }
  58.  
  59. int main(){
  60. // freopen("in.txt", "r", stdin);
  61. int CASE = 1;
  62. int n, m;
  63. while(sc(n) != EOF){
  64. vector <string> v;
  65. adj.clear(); vis.clear(); ans.clear();
  66. FOR(i, n){
  67. string str; cin >> str;
  68. v.push_back(str);
  69. }
  70. sc(m);
  71. FOR(i, m){
  72. string a, b; cin >> a >> b;
  73. adj[b].push_back(a);
  74. }
  75. FOR(i, v.size())
  76. if(vis.find(v[i]) == vis.end())
  77. dfs(v[i]);
  78. printf("Case #%d: Dilbert should drink beverages in this order:", CASE++);
  79. FOR(i, ans.size())
  80. printf(" %s", ans[i].c_str());
  81. printf(".\n\n");
  82. }
  83. return 0;
  84. }
Success #stdin #stdout 0s 3488KB
stdin
3
vodka
wine
beer
2
wine vodka
beer wine

5
wine
beer
rum
apple-juice
cachaca
6
beer cachaca
apple-juice beer
apple-juice rum
beer rum
beer wine
wine cachaca

10
cachaca
rum
apple-juice
tequila
whiskey
wine
vodka
beer
martini
gin
11
beer whiskey
apple-juice gin
rum cachaca
vodka tequila
apple-juice martini
rum gin
wine whiskey
apple-juice beer
beer rum
wine vodka
beer tequila
stdout
Case #1: Dilbert should drink beverages in this order: beer wine vodka.

Case #2: Dilbert should drink beverages in this order: apple-juice beer wine rum cachaca.

Case #3: Dilbert should drink beverages in this order: apple-juice beer rum cachaca wine vodka tequila whiskey martini gin.