-
Notifications
You must be signed in to change notification settings - Fork 0
/
00405.cpp
98 lines (77 loc) · 2.36 KB
/
00405.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include <bits/stdc++.h>
using namespace std;
#define ll long long
struct dt{
string mta, country, admd, prmd, on;
dt(string _mta, string _country, string _admd, string _prmd, string _on){
mta = _mta;
country = _country;
admd = _admd;
prmd = _prmd;
on = _on;
}
};
map<string, vector<dt>> adj;
dt id = {"0", "0", "0", "0", "0"};
ll able = 0; // reset plz
map<string, bool> vis;
string dfs(string now){
// cout << "visited " << now << "\n";
if(vis[now]){
able = -1;
return now;
}
vis[now] = true;
for(auto &[mta, country, admd, prmd, on]: adj[now]){
ll cnt = 0;
if((country == id.country) || country == "*") ++cnt;
if((admd == id.admd) || admd == "*") ++cnt;
if((prmd == id.prmd) || prmd == "*") ++cnt;
if((on == id.on) || on == "*") ++cnt;
if(cnt == 4){
// cout << mta << " " << country << " " << admd << " " << prmd << " " << on << " " << "\n";
if(mta == now){
able = 1;
return mta;
}
else return dfs(mta);
}
}
able = 0;
return now;
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
// freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);
ll m; ll cs = 0;
while(cin >> m){
cout << "Scenario # " << ++cs << "\n";
while(m--){
string ori; ll i; cin >> ori >> i;
vector<dt> dum;
while(i--){
string mta, country, admd, prmd, on;
cin >> mta >> country >> admd >> prmd >> on;
adj[ori].emplace_back(mta, country, admd, prmd, on);
}
}
ll n; cin >> n;
for(ll i = 1; i <= n; i++){
vis.clear();
cout << i << " -- ";
able = 0;
string mta, country, admd, prmd, on;
cin >> mta >> country >> admd >> prmd >> on;
id = {mta, country, admd, prmd, on};
string res = dfs(mta);
// cout << hm.mta << "\n";
if(able==1) cout << "delivered to " << res << "\n";
else if(able == 0) cout << "unable to route at " << res << "\n";
else cout << "circular routing detected by " << res << "\n";
}
cout << "\n";
}
return 0;
}