#include #include #include #include #include #include #include std::set find_all(std::set const& a, std::set const& b) { std::set result { }; std::set_union( std::begin(a), std::end(a), std::begin(b), std::end(b), std::inserter(result, std::begin(result))); return result; } std::set read_team(std::istream& is) { std::set result { }; std::size_t n { }; is >> n; std::copy_n(std::istream_iterator{ is }, n, std::inserter(result, std::end(result))); return result; } int main() { std::ifstream ifs { "teams.txt" }; std::size_t m { }; ifs >> m; std::vector> teams { }; std::generate_n(std::back_inserter(teams), m, [&ifs]() { return read_team(ifs); }); std::set employees { std::accumulate(std::begin(teams), std::end(teams), std::set{ }, find_all) }; std::cout << "All employees are:" << std::endl; std::copy(std::begin(employees), std::end(employees), std::ostream_iterator{ std::cout, "\n" }); auto it = std::max_element(std::begin(teams), std::end(teams), [](auto&& a, auto&& b) { return a.size() < b.size(); }); std::cout << "The largest team consists of:" << std::endl; std::copy(std::begin(*it), std::end(*it), std::ostream_iterator{ std::cout, "\n" }); }