#include #include #include #include #include #include #include using namespace std; bool sortByVal(const pair& a, const pair& b) { return (a.second > b.second); } int main() { int countActors, countScenes; string line; ifstream inputFile("star.in"); if (inputFile.is_open()) { inputFile >> countActors >> countScenes; } //cin >> countActors; //cin >> countScenes; // key number of the actor, value - salary vector> salaries; for (int i = 0; i < countActors; i++) { int salary; //cin >> salary; inputFile >> salary; salaries.push_back(make_pair(to_string(i + 1), salary)); } // key number of the scene, value - actors for this scene map> scenes; for (int i = 0; i < countScenes; i++) { int countActorsInScene; //cin >> countActorsInScene; inputFile >> countActorsInScene; vector partisipants; for (int j = 0; j < countActorsInScene; j++) { int actor; //cin >> actor; inputFile >> actor; partisipants.push_back(actor); } scenes.insert({ i + 1, partisipants }); } inputFile.close(); // sort the map with the salary sort(salaries.begin(), salaries.end(), sortByVal); vector scenesOrder; for (int i = 0; i < salaries.size(); i++) { int currentActor = stoi(salaries[i].first); int j = scenesOrder.size(); for (const auto& scene : scenes) { int countScene = std::count(scenesOrder.begin(), scenesOrder.end(), scene.first); if (countScene != 0) { continue; } int count = std::count(scene.second.begin(), scene.second.end(), currentActor); if (count != 0) { for (; j < scenesOrder.size(); j++) { if (scene.second.size() < scenes[scenesOrder[j]].size()) { break; } } scenesOrder.insert(scenesOrder.begin() + j, scene.first); } } } ofstream outputFile; outputFile.open("star.out"); for (const auto& scene : scenesOrder) { outputFile << scene << " "; } outputFile << "\n"; outputFile.close(); }