fork download
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <utility>
  4. #include <set>
  5. #include <unordered_map>
  6.  
  7. #define LIMIT 1000000
  8.  
  9. using namespace std;
  10.  
  11. int parent[LIMIT], ranki[LIMIT];
  12.  
  13. int find(int x){
  14. if(parent[x] != x) parent[x] = find(parent[x]);;
  15. return parent[x];
  16. }
  17.  
  18. void merge(int x, int y){
  19. x = find(x);
  20. y = find(y);
  21. if(x != y){
  22. if(ranki[x] < ranki[y]) parent[x] = y;
  23. else parent[y] = x;
  24. if(ranki[x] == ranki[y]) ranki[x]++;
  25. }
  26. }
  27.  
  28. int main(void){
  29. int n, m, cable;
  30. string hname, hname2;
  31. scanf("%d", &cable);
  32. unordered_map<string, int> names;
  33. for(int i = 0; i < n; i++){
  34. cin >> hname;
  35. names[hname] = i;
  36. }
  37. for(int i = 0; i < names.size(); i++) parent[i] = i;
  38. set<tuple<double, string, string> > edges;
  39. scanf("%d", &m);
  40. for(int i = 0; i < m; i++){
  41. cin >> hname >> hname2;
  42. scanf("%lf", &distance);
  43. edges.insert(make_tuple(distance, hname, hname2));
  44. }
  45. double ans = 0;
  46. while(!edges.empty()){
  47. tuple<double, string, string> curr = *edges.begin();
  48. int x = find(names[get<1>(curr)]);
  49. int y = find(names[get<2>(curr)]);
  50. if(x != y){
  51. ans += get<0>(curr);
  52. merge(x, y);
  53. }
  54. edges.remove(edges.begin());
  55. }
  56. if(ans > cable) printf("Not enough cable\n");
  57. else printf("Need %.1lf miles of cable\n");
  58. return 0;
  59. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.cpp: In function ‘int main()’:
prog.cpp:42:16: error: address of overloaded function with no contextual type information
   scanf("%lf", &distance);
                ^~~~~~~~~
prog.cpp:43:50: error: too many arguments to function ‘constexpr std::tuple<typename std::__decay_and_strip<_Elements>::__type ...> std::make_tuple(_Elements&& ...) [with _Elements = {}]’
   edges.insert(make_tuple(distance, hname, hname2));
                                                  ^
In file included from /usr/include/c++/6/unordered_map:41:0,
                 from prog.cpp:5:
/usr/include/c++/6/tuple:1392:5: note: declared here
     make_tuple(_Elements&&... __args)
     ^~~~~~~~~~
prog.cpp:43:51: error: no matching function for call to ‘std::set<std::tuple<double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::insert(std::tuple<>)’
   edges.insert(make_tuple(distance, hname, hname2));
                                                   ^
In file included from /usr/include/c++/6/set:61:0,
                 from prog.cpp:4:
/usr/include/c++/6/bits/stl_set.h:480:7: note: candidate: std::pair<typename std::_Rb_tree<_Key, _Key, std::_Identity<_Key>, _Compare, typename __gnu_cxx::__alloc_traits<_Alloc>::rebind<_Key>::other>::const_iterator, bool> std::set<_Key, _Compare, _Alloc>::insert(const value_type&) [with _Key = std::tuple<double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >; _Compare = std::less<std::tuple<double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >; _Alloc = std::allocator<std::tuple<double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >; typename std::_Rb_tree<_Key, _Key, std::_Identity<_Key>, _Compare, typename __gnu_cxx::__alloc_traits<_Alloc>::rebind<_Key>::other>::const_iterator = std::_Rb_tree_const_iterator<std::tuple<double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >; std::set<_Key, _Compare, _Alloc>::value_type = std::tuple<double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >]
       insert(const value_type& __x)
       ^~~~~~
/usr/include/c++/6/bits/stl_set.h:480:7: note:   no known conversion for argument 1 from ‘std::tuple<>’ to ‘const value_type& {aka const std::tuple<double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >&}’
/usr/include/c++/6/bits/stl_set.h:489:7: note: candidate: std::pair<typename std::_Rb_tree<_Key, _Key, std::_Identity<_Key>, _Compare, typename __gnu_cxx::__alloc_traits<_Alloc>::rebind<_Key>::other>::const_iterator, bool> std::set<_Key, _Compare, _Alloc>::insert(std::set<_Key, _Compare, _Alloc>::value_type&&) [with _Key = std::tuple<double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >; _Compare = std::less<std::tuple<double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >; _Alloc = std::allocator<std::tuple<double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >; typename std::_Rb_tree<_Key, _Key, std::_Identity<_Key>, _Compare, typename __gnu_cxx::__alloc_traits<_Alloc>::rebind<_Key>::other>::const_iterator = std::_Rb_tree_const_iterator<std::tuple<double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >; std::set<_Key, _Compare, _Alloc>::value_type = std::tuple<double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >]
       insert(value_type&& __x)
       ^~~~~~
/usr/include/c++/6/bits/stl_set.h:489:7: note:   no known conversion for argument 1 from ‘std::tuple<>’ to ‘std::set<std::tuple<double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::value_type&& {aka std::tuple<double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >&&}’
/usr/include/c++/6/bits/stl_set.h:517:7: note: candidate: std::set<_Key, _Compare, _Alloc>::iterator std::set<_Key, _Compare, _Alloc>::insert(std::set<_Key, _Compare, _Alloc>::const_iterator, const value_type&) [with _Key = std::tuple<double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >; _Compare = std::less<std::tuple<double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >; _Alloc = std::allocator<std::tuple<double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >; std::set<_Key, _Compare, _Alloc>::iterator = std::_Rb_tree_const_iterator<std::tuple<double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >; std::set<_Key, _Compare, _Alloc>::const_iterator = std::_Rb_tree_const_iterator<std::tuple<double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >; std::set<_Key, _Compare, _Alloc>::value_type = std::tuple<double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >]
       insert(const_iterator __position, const value_type& __x)
       ^~~~~~
/usr/include/c++/6/bits/stl_set.h:517:7: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/6/bits/stl_set.h:522:7: note: candidate: std::set<_Key, _Compare, _Alloc>::iterator std::set<_Key, _Compare, _Alloc>::insert(std::set<_Key, _Compare, _Alloc>::const_iterator, std::set<_Key, _Compare, _Alloc>::value_type&&) [with _Key = std::tuple<double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >; _Compare = std::less<std::tuple<double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >; _Alloc = std::allocator<std::tuple<double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >; std::set<_Key, _Compare, _Alloc>::iterator = std::_Rb_tree_const_iterator<std::tuple<double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >; std::set<_Key, _Compare, _Alloc>::const_iterator = std::_Rb_tree_const_iterator<std::tuple<double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >; std::set<_Key, _Compare, _Alloc>::value_type = std::tuple<double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >]
       insert(const_iterator __position, value_type&& __x)
       ^~~~~~
/usr/include/c++/6/bits/stl_set.h:522:7: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/6/bits/stl_set.h:537:2: note: candidate: template<class _InputIterator> void std::set<_Key, _Compare, _Alloc>::insert(_InputIterator, _InputIterator) [with _InputIterator = _InputIterator; _Key = std::tuple<double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >; _Compare = std::less<std::tuple<double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >; _Alloc = std::allocator<std::tuple<double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >]
  insert(_InputIterator __first, _InputIterator __last)
  ^~~~~~
/usr/include/c++/6/bits/stl_set.h:537:2: note:   template argument deduction/substitution failed:
prog.cpp:43:51: note:   candidate expects 2 arguments, 1 provided
   edges.insert(make_tuple(distance, hname, hname2));
                                                   ^
In file included from /usr/include/c++/6/set:61:0,
                 from prog.cpp:4:
/usr/include/c++/6/bits/stl_set.h:549:7: note: candidate: void std::set<_Key, _Compare, _Alloc>::insert(std::initializer_list<_Tp>) [with _Key = std::tuple<double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >; _Compare = std::less<std::tuple<double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >; _Alloc = std::allocator<std::tuple<double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >]
       insert(initializer_list<value_type> __l)
       ^~~~~~
/usr/include/c++/6/bits/stl_set.h:549:7: note:   no known conversion for argument 1 from ‘std::tuple<>’ to ‘std::initializer_list<std::tuple<double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >’
prog.cpp:54:9: error: ‘class std::set<std::tuple<double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >’ has no member named ‘remove’
   edges.remove(edges.begin());
         ^~~~~~
stdout
Standard output is empty