Submission #76421

#TimeUsernameProblemLanguageResultExecution timeMemory
76421mfbalinDijamant (COI16_dijament)C++11
56 / 100
2082 ms380248 KiB
#include <iostream> #include <string> #include <vector> #include <set> #include <map> using namespace std; int main(int argc, char *argv[]) { ios::sync_with_stdio(false); int N; cin >> N; map<string, int> mp; vector<set<int>> derived(N); vector<vector<set<int>>> inter(N, vector<set<int>>(N)); int cnt = 0; for(int i = 0; i < N; i++) { string K, temp; cin >> K >> temp; vector<string> DD; for(;;) { cin >> temp; if(temp == ";") break; DD.push_back(temp); } /*cerr << K << '\n'; for(auto &s: DD) cerr << s << ' '; cerr << endl;*/ if(mp.find(K) != mp.end()) { cout << "greska\n"; continue; } bool b = false; for(auto &i: DD) if(mp.find(i) == mp.end()) b = true; if(b) { cout << "greska\n"; continue; } mp[K] = cnt++; int k = mp[K]; vector<int> dd; for(auto &i: DD) dd.push_back(mp[i]); set<int> derivedtemp; for(auto i: dd) { derivedtemp.insert(derived[i].begin(), derived[i].end()); derivedtemp.insert(i); } for(auto j: derivedtemp) { for(auto k: derivedtemp) if(j < k && derived[j].find(k) == derived[j].end() && derived[k].find(j) == derived[k].end() && not inter[j][k].empty()) { b = true; break; } if(b) break; } if(b) { mp.erase(K); cout << "greska\n"; continue; } derived[k] = derivedtemp; for(int i = 0; i < k; i++) { int a = i; int b = k; if(derived[a].size() > derived[b].size()) swap(a, b); for(auto j: derived[a]) if(derived[b].find(j) != derived[b].end()) inter[i][k].insert(j); } cout << "ok\n"; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...