#include #include #include using namespace std; void mark(string name, char family); string find(string n); void onion(string m, string n); // using onion to avoid keyword union. int main() { char code; string name, name1, name2; // I'll assume no spaces after last word on a line. while (cin >> code) switch(code) { case 'C': cin >> name; mark(find(name), 'C'); break; case 'R': cin >> name1 >> name2; onion(name1, name2); break; case 'M': cin >> name1; getline(cin, name2); if (name2 == "") mark(find(name1), 'M'); else onion(name1, name2); break; default: cerr << "bad code" << endl; } cout << "Not yet" << endl; } // global used by onion/find map fam_rep; // global used by mark map fam; void mark(string name, char family) { if (fam[name]=='C' && family =='M' || fam[name]=='M' && family =='C') { cout << "Resolved" << endl; exit(0); } fam[name] = family; } string find(string n) { return (fam_rep[n] == n) ? n : fam_rep[n]=find (fam_rep[n]); } void onion(string m, string n) { string m_rep = find(m), n_rep = find(n); if (m_rep != n_rep) { mark(m_rep, fam[n_rep]); fam_rep[m_rep] = n_rep; } }