#include #include #include #include #include #include using namespace std; unordered_map > edges; unordered_set conflicts; void putedge(int i,int j, const vector& t, const vector& s, const vector& d) { string conf = t[i]+t[j]; if (s[j] >= d[i] || (conflicts.find(conf)==end(conflicts))) { edges[j].push_back(i); } } void computeedges(const vector& t,const vector& s, const vector& d) { for (int i = 0; i < d.size(); ++i) { for (int j = i+1; j < d.size(); ++j) { if (d[j]>d[i]) { putedge(i, j, t, s, d); } else if (d[i] > d[j]) { putedge(j, i, t, s, d); } else { putedge(i, j, t, s, d); putedge(j,i, t, s, d); } } } } int main() { conflicts.insert("DE"); conflicts.insert("ED"); conflicts.insert("CD"); conflicts.insert("DC"); conflicts.insert("MC"); conflicts.insert("CM"); conflicts.insert("EM"); conflicts.insert("ME"); //std::string input_filename = "input.txt"; //std::fstream fin(input_filename); std::istream& in = std::cin; //std::istream& in = fin; int cases; in >> cases; for (int a0 = 0; a0 < cases; a0++) { edges.clear(); int m; int n; in >> m >> n; vector t(n); for (int t_i = 0; t_i < n; t_i++) { in >> t[t_i]; } vector s(n); for (int s_i = 0; s_i < n; s_i++) { in >> s[s_i]; } vector d(n); for (int d_i = 0; d_i < n; d_i++) { in >> d[d_i]; } computeedges(t,s,d); /* vector result = minimumZooNumbers(m, n, t, s, d); for (size_t i = 0; i < result.size(); i++) { cout << result[i] << (i != result.size() - 1 ? " " : ""); } cout << endl; */ } return 0; }