Submission #786406

# Submission time Handle Problem Language Result Execution time Memory
786406 2023-07-18T07:26:25 Z minhcool timeismoney (balkan11_timeismoney) C++17
Compilation error
0 ms 0 KB
#define local
#ifndef local
#include ""
#endif
#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
using namespace __gnu_pbds;
using namespace std;
 
//#define int long long
#define fi first
#define se second
#define pb push_back
#define mp make_pair
 
typedef pair<int, int> ii;
typedef pair<ii, int> iii;
typedef pair<ii, ii> iiii;
 
const int N = 3e5 + 5;
 
const int oo = 1e9 + 7, mod = 1e9 + 7;
 
mt19937 rng(1);
 
int rnd(int l, int r){
	int temp = rng() % (r - l + 1);
	return abs(temp) + l;
}
 
int n, m;
vector<iiii> edges;
 
vector<iiii> edges2;
 
int rt[N], sz[N];
 
int root(int x){
	return (x == rt[x] ? x : rt[x] = root(rt[x]));
}
 
bool merge(int x, int y){
	x = root(x), y = root(y);
	if(x == y) return 0;
	sz[x] += sz[y];
	rt[y] = x;
	return 1;
}
 
bool cmp(iiii a, iiii b){
	return a.se.fi < b.se.fi;
}
 
pair<int, ii> answer = {oo, {0, 0}};
 
map<ii, ii> mpp;
 
void solve(ii a, ii b){
	if(a.fi == b.fi || a.se == b.se) return;
	//cout << a.fi << " " << a.se << " " << b.fi << " " << b.se << "\n";
	if(b.fi < a.fi) swap(a, b);
    if(a.se < b.se) return;
	int temp1 = b.fi - a.fi, temp2 = a.se - b.se, cnt = 0;
	//assert(temp1 >= 0 && temp2 >= 0);
	//cout << temp1 << " " << temp2 << "\n";
	for(auto it : edges){
		edges2[cnt] = ({{it.fi.fi, it.fi.se}, {it.se.fi * temp2 + it.se.se * temp1, cnt}});
		cnt++;
	}
	sort(edges2.begin(), edges2.end(), cmp);
	int tol_a = 0, tol_b = 0;
	for(int i = 1; i <= n; i++){
		sz[i] = 1, rt[i] = i;
	}
	for(auto it : edges2){
		if(merge(it.fi.fi, it.fi.se)){
			//cout << it.fi.fi << " " << it.fi.se << "\n";
			tol_a += edges[it.se.se].se.fi;
			tol_b += edges[it.se.se].se.se;
		}
	}
	answer = min(answer, {tol_a * tol_b, {tol_a, tol_b}});
	if(mpp.find({tol_a, tol_b}) == mpp.end()) mpp[{tol_a, tol_b}] = {temp2, temp1};
	//cout << tol_a << " " << tol_b << " " << temp2 << " " << temp1 << "\n";
	if ((a.se - b.se) * (tol_a - a.fi) == (a.se - tol_b) * (b.fi - a.fi)) {
	//	answer = min(answer, {a.fi * a.se, a});
	//	answer = min(answer, {b.fi * b.se, b});
		return;
	}
	solve(a, {tol_a, tol_b});
	solve({tol_a, tol_b}, b);
}
 
bool cmp1(iiii a, iiii b){
	return a.se.fi < b.se.se;
}
 
bool cmp2(iiii a, iiii b){
	return a.se.se < b.se.se;
}
 
#ifdef local
void process(){
	cin >> n >> m;
	for(int i = 1; i <= m; i++){
		int x, y, a, b;
		cin >> x >> y >> a >> b;
		x++, y++;
		edges.pb({{x, y}, {a, b}});
	}
	sort(edges.begin(), edges.end(), cmp1);
	for(int i = 1; i <= n; i++) sz[i] = 1, rt[i] = i;
	ii tol_1 = {0, 0};
	for(auto it : edges) if(merge(it.fi.fi, it.fi.se)) tol_1 = {tol_1.fi + it.se.fi, tol_1.se + it.se.se};
	sort(edges.begin(), edges.end(), cmp2);
	for(int i = 1; i <= n; i++) sz[i] = 1, rt[i] = i;
	ii tol_2 = {0, 0};
	for(auto it : edges) if(merge(it.fi.fi, it.fi.se)) tol_2 = {tol_2.fi + it.se.fi, tol_2.se + it.se.se};
    edges2.resize(edges);
	mpp[tol_1] = {1, 0};
	mpp[tol_2] = {0, 1};
	answer = min(answer, {tol_1.fi * tol_1.se, tol_1});
	answer = min(answer, {tol_2.fi * tol_2.se, tol_2});
	solve(tol_1, tol_2);
	cout << answer.se.fi << " " << answer.se.se << "\n";
 
	//cout << mpp[answer.se].fi << " " << mpp[answer.se].se << "\n";
//	edges2.clear();
	int cnt = 0;
	for(auto it : edges){
		edges2[cnt] = ({{it.fi.fi, it.fi.se}, {it.se.fi * mpp[answer.se].fi + it.se.se * mpp[answer.se].se, cnt}});
		cnt++;
	}
	sort(edges2.begin(), edges2.end(), cmp);
	int tol_a = 0, tol_b = 0;
	for(int i = 1; i <= n; i++){
		sz[i] = 1, rt[i] = i;
	}
	for(auto it : edges2){
		if(merge(it.fi.fi, it.fi.se)){
			cout << it.fi.fi - 1 << " " << it.fi.se - 1 << "\n";
		}
	}
}
 
signed main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	//freopen("kek.inp", "r", stdin);
	//freopen("kek.out", "w", stdout);
	process();
}
#endif

Compilation message

timeismoney.cpp: In function 'void solve(ii, ii)':
timeismoney.cpp:11:12: warning: left operand of comma operator has no effect [-Wunused-value]
   11 | #define fi first
      |            ^
timeismoney.cpp:67:26: note: in expansion of macro 'fi'
   67 |   edges2[cnt] = ({{it.fi.fi, it.fi.se}, {it.se.fi * temp2 + it.se.se * temp1, cnt}});
      |                          ^~
timeismoney.cpp:67:38: error: expected ';' before '}' token
   67 |   edges2[cnt] = ({{it.fi.fi, it.fi.se}, {it.se.fi * temp2 + it.se.se * temp1, cnt}});
      |                                      ^
timeismoney.cpp:12:12: warning: right operand of comma operator has no effect [-Wunused-value]
   12 | #define se second
      |            ^
timeismoney.cpp:67:36: note: in expansion of macro 'se'
   67 |   edges2[cnt] = ({{it.fi.fi, it.fi.se}, {it.se.fi * temp2 + it.se.se * temp1, cnt}});
      |                                    ^~
timeismoney.cpp:67:39: error: expected primary-expression before ',' token
   67 |   edges2[cnt] = ({{it.fi.fi, it.fi.se}, {it.se.fi * temp2 + it.se.se * temp1, cnt}});
      |                                       ^
timeismoney.cpp:67:41: error: expected primary-expression before '{' token
   67 |   edges2[cnt] = ({{it.fi.fi, it.fi.se}, {it.se.fi * temp2 + it.se.se * temp1, cnt}});
      |                                         ^
timeismoney.cpp:67:84: error: no match for 'operator=' (operand types are '__gnu_cxx::__alloc_traits<std::allocator<std::pair<std::pair<int, int>, std::pair<int, int> > >, std::pair<std::pair<int, int>, std::pair<int, int> > >::value_type' {aka 'std::pair<std::pair<int, int>, std::pair<int, int> >'} and 'void')
   67 |   edges2[cnt] = ({{it.fi.fi, it.fi.se}, {it.se.fi * temp2 + it.se.se * temp1, cnt}});
      |                                                                                    ^
In file included from /usr/include/c++/10/bits/stl_algobase.h:64,
                 from /usr/include/c++/10/bits/specfun.h:45,
                 from /usr/include/c++/10/cmath:1927,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:41,
                 from timeismoney.cpp:5:
/usr/include/c++/10/bits/stl_pair.h:390:7: note: candidate: 'std::pair<_T1, _T2>& std::pair<_T1, _T2>::operator=(typename std::conditional<std::__and_<std::is_copy_assignable<_T1>, std::is_copy_assignable<_T2> >::value, const std::pair<_T1, _T2>&, const std::__nonesuch&>::type) [with _T1 = std::pair<int, int>; _T2 = std::pair<int, int>; typename std::conditional<std::__and_<std::is_copy_assignable<_T1>, std::is_copy_assignable<_T2> >::value, const std::pair<_T1, _T2>&, const std::__nonesuch&>::type = const std::pair<std::pair<int, int>, std::pair<int, int> >&]'
  390 |       operator=(typename conditional<
      |       ^~~~~~~~
/usr/include/c++/10/bits/stl_pair.h:393:41: note:   no known conversion for argument 1 from 'void' to 'std::conditional<true, const std::pair<std::pair<int, int>, std::pair<int, int> >&, const std::__nonesuch&>::type' {aka 'const std::pair<std::pair<int, int>, std::pair<int, int> >&'}
  390 |       operator=(typename conditional<
      |                 ~~~~~~~~~~~~~~~~~~~~~    
  391 |   __and_<is_copy_assignable<_T1>,
      |   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~        
  392 |          is_copy_assignable<_T2>>::value,
      |          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  393 |   const pair&, const __nonesuch&>::type __p)
      |   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/stl_pair.h:401:7: note: candidate: 'std::pair<_T1, _T2>& std::pair<_T1, _T2>::operator=(typename std::conditional<std::__and_<std::is_move_assignable<_Tp>, std::is_move_assignable<_T2> >::value, std::pair<_T1, _T2>&&, std::__nonesuch&&>::type) [with _T1 = std::pair<int, int>; _T2 = std::pair<int, int>; typename std::conditional<std::__and_<std::is_move_assignable<_Tp>, std::is_move_assignable<_T2> >::value, std::pair<_T1, _T2>&&, std::__nonesuch&&>::type = std::pair<std::pair<int, int>, std::pair<int, int> >&&]'
  401 |       operator=(typename conditional<
      |       ^~~~~~~~
/usr/include/c++/10/bits/stl_pair.h:404:31: note:   no known conversion for argument 1 from 'void' to 'std::conditional<true, std::pair<std::pair<int, int>, std::pair<int, int> >&&, std::__nonesuch&&>::type' {aka 'std::pair<std::pair<int, int>, std::pair<int, int> >&&'}
  401 |       operator=(typename conditional<
      |                 ~~~~~~~~~~~~~~~~~~~~~
  402 |   __and_<is_move_assignable<_T1>,
      |   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  403 |          is_move_assignable<_T2>>::value,
      |          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  404 |   pair&&, __nonesuch&&>::type __p)
      |   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/stl_pair.h:418:2: note: candidate: 'template<class _U1, class _U2> typename std::enable_if<std::__and_<std::is_assignable<_T1&, const _U1&>, std::is_assignable<_T2&, const _U2&> >::value, std::pair<_T1, _T2>&>::type std::pair<_T1, _T2>::operator=(const std::pair<_U1, _U2>&) [with _U1 = _U1; _U2 = _U2; _T1 = std::pair<int, int>; _T2 = std::pair<int, int>]'
  418 |  operator=(const pair<_U1, _U2>& __p)
      |  ^~~~~~~~
/usr/include/c++/10/bits/stl_pair.h:418:2: note:   template argument deduction/substitution failed:
timeismoney.cpp:67:84: note:   mismatched types 'const std::pair<_T1, _T2>' and 'void'
   67 |   edges2[cnt] = ({{it.fi.fi, it.fi.se}, {it.se.fi * temp2 + it.se.se * temp1, cnt}});
      |                                                                                    ^
In file included from /usr/include/c++/10/bits/stl_algobase.h:64,
                 from /usr/include/c++/10/bits/specfun.h:45,
                 from /usr/include/c++/10/cmath:1927,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:41,
                 from timeismoney.cpp:5:
/usr/include/c++/10/bits/stl_pair.h:430:2: note: candidate: 'template<class _U1, class _U2> typename std::enable_if<std::__and_<std::is_assignable<_T1&, _U1&&>, std::is_assignable<_T2&, _U2&&> >::value, std::pair<_T1, _T2>&>::type std::pair<_T1, _T2>::operator=(std::pair<_U1, _U2>&&) [with _U1 = _U1; _U2 = _U2; _T1 = std::pair<int, int>; _T2 = std::pair<int, int>]'
  430 |  operator=(pair<_U1, _U2>&& __p)
      |  ^~~~~~~~
/usr/include/c++/10/bits/stl_pair.h:430:2: note:   template argument deduction/substitution failed:
timeismoney.cpp:67:84: note:   mismatched types 'std::pair<_T1, _T2>' and 'void'
   67 |   edges2[cnt] = ({{it.fi.fi, it.fi.se}, {it.se.fi * temp2 + it.se.se * temp1, cnt}});
      |                                                                                    ^
timeismoney.cpp: In function 'void process()':
timeismoney.cpp:119:24: error: no matching function for call to 'std::vector<std::pair<std::pair<int, int>, std::pair<int, int> > >::resize(std::vector<std::pair<std::pair<int, int>, std::pair<int, int> > >&)'
  119 |     edges2.resize(edges);
      |                        ^
In file included from /usr/include/c++/10/vector:67,
                 from /usr/include/c++/10/functional:62,
                 from /usr/include/c++/10/pstl/glue_algorithm_defs.h:13,
                 from /usr/include/c++/10/algorithm:74,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:65,
                 from timeismoney.cpp:5:
/usr/include/c++/10/bits/stl_vector.h:937:7: note: candidate: 'void std::vector<_Tp, _Alloc>::resize(std::vector<_Tp, _Alloc>::size_type) [with _Tp = std::pair<std::pair<int, int>, std::pair<int, int> >; _Alloc = std::allocator<std::pair<std::pair<int, int>, std::pair<int, int> > >; std::vector<_Tp, _Alloc>::size_type = long unsigned int]'
  937 |       resize(size_type __new_size)
      |       ^~~~~~
/usr/include/c++/10/bits/stl_vector.h:937:24: note:   no known conversion for argument 1 from 'std::vector<std::pair<std::pair<int, int>, std::pair<int, int> > >' to 'std::vector<std::pair<std::pair<int, int>, std::pair<int, int> > >::size_type' {aka 'long unsigned int'}
  937 |       resize(size_type __new_size)
      |              ~~~~~~~~~~^~~~~~~~~~
/usr/include/c++/10/bits/stl_vector.h:957:7: note: candidate: 'void std::vector<_Tp, _Alloc>::resize(std::vector<_Tp, _Alloc>::size_type, const value_type&) [with _Tp = std::pair<std::pair<int, int>, std::pair<int, int> >; _Alloc = std::allocator<std::pair<std::pair<int, int>, std::pair<int, int> > >; std::vector<_Tp, _Alloc>::size_type = long unsigned int; std::vector<_Tp, _Alloc>::value_type = std::pair<std::pair<int, int>, std::pair<int, int> >]'
  957 |       resize(size_type __new_size, const value_type& __x)
      |       ^~~~~~
/usr/include/c++/10/bits/stl_vector.h:957:7: note:   candidate expects 2 arguments, 1 provided
timeismoney.cpp:11:12: warning: left operand of comma operator has no effect [-Wunused-value]
   11 | #define fi first
      |            ^
timeismoney.cpp:131:26: note: in expansion of macro 'fi'
  131 |   edges2[cnt] = ({{it.fi.fi, it.fi.se}, {it.se.fi * mpp[answer.se].fi + it.se.se * mpp[answer.se].se, cnt}});
      |                          ^~
timeismoney.cpp:131:38: error: expected ';' before '}' token
  131 |   edges2[cnt] = ({{it.fi.fi, it.fi.se}, {it.se.fi * mpp[answer.se].fi + it.se.se * mpp[answer.se].se, cnt}});
      |                                      ^
timeismoney.cpp:12:12: warning: right operand of comma operator has no effect [-Wunused-value]
   12 | #define se second
      |            ^
timeismoney.cpp:131:36: note: in expansion of macro 'se'
  131 |   edges2[cnt] = ({{it.fi.fi, it.fi.se}, {it.se.fi * mpp[answer.se].fi + it.se.se * mpp[answer.se].se, cnt}});
      |                                    ^~
timeismoney.cpp:131:39: error: expected primary-expression before ',' token
  131 |   edges2[cnt] = ({{it.fi.fi, it.fi.se}, {it.se.fi * mpp[answer.se].fi + it.se.se * mpp[answer.se].se, cnt}});
      |                                       ^
timeismoney.cpp:131:41: error: expected primary-expression before '{' token
  131 |   edges2[cnt] = ({{it.fi.fi, it.fi.se}, {it.se.fi * mpp[answer.se].fi + it.se.se * mpp[answer.se].se, cnt}});
      |                                         ^
timeismoney.cpp:131:108: error: no match for 'operator=' (operand types are '__gnu_cxx::__alloc_traits<std::allocator<std::pair<std::pair<int, int>, std::pair<int, int> > >, std::pair<std::pair<int, int>, std::pair<int, int> > >::value_type' {aka 'std::pair<std::pair<int, int>, std::pair<int, int> >'} and 'void')
  131 |   edges2[cnt] = ({{it.fi.fi, it.fi.se}, {it.se.fi * mpp[answer.se].fi + it.se.se * mpp[answer.se].se, cnt}});
      |                                                                                                            ^
In file included from /usr/include/c++/10/bits/stl_algobase.h:64,
                 from /usr/include/c++/10/bits/specfun.h:45,
                 from /usr/include/c++/10/cmath:1927,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:41,
                 from timeismoney.cpp:5:
/usr/include/c++/10/bits/stl_pair.h:390:7: note: candidate: 'std::pair<_T1, _T2>& std::pair<_T1, _T2>::operator=(typename std::conditional<std::__and_<std::is_copy_assignable<_T1>, std::is_copy_assignable<_T2> >::value, const std::pair<_T1, _T2>&, const std::__nonesuch&>::type) [with _T1 = std::pair<int, int>; _T2 = std::pair<int, int>; typename std::conditional<std::__and_<std::is_copy_assignable<_T1>, std::is_copy_assignable<_T2> >::value, const std::pair<_T1, _T2>&, const std::__nonesuch&>::type = const std::pair<std::pair<int, int>, std::pair<int, int> >&]'
  390 |       operator=(typename conditional<
      |       ^~~~~~~~
/usr/include/c++/10/bits/stl_pair.h:393:41: note:   no known conversion for argument 1 from 'void' to 'std::conditional<true, const std::pair<std::pair<int, int>, std::pair<int, int> >&, const std::__nonesuch&>::type' {aka 'const std::pair<std::pair<int, int>, std::pair<int, int> >&'}
  390 |       operator=(typename conditional<
      |                 ~~~~~~~~~~~~~~~~~~~~~    
  391 |   __and_<is_copy_assignable<_T1>,
      |   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~        
  392 |          is_copy_assignable<_T2>>::value,
      |          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  393 |   const pair&, const __nonesuch&>::type __p)
      |   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/stl_pair.h:401:7: note: candidate: 'std::pair<_T1, _T2>& std::pair<_T1, _T2>::operator=(typename std::conditional<std::__and_<std::is_move_assignable<_Tp>, std::is_move_assignable<_T2> >::value, std::pair<_T1, _T2>&&, std::__nonesuch&&>::type) [with _T1 = std::pair<int, int>; _T2 = std::pair<int, int>; typename std::conditional<std::__and_<std::is_move_assignable<_Tp>, std::is_move_assignable<_T2> >::value, std::pair<_T1, _T2>&&, std::__nonesuch&&>::type = std::pair<std::pair<int, int>, std::pair<int, int> >&&]'
  401 |       operator=(typename conditional<
      |       ^~~~~~~~
/usr/include/c++/10/bits/stl_pair.h:404:31: note:   no known conversion for argument 1 from 'void' to 'std::conditional<true, std::pair<std::pair<int, int>, std::pair<int, int> >&&, std::__nonesuch&&>::type' {aka 'std::pair<std::pair<int, int>, std::pair<int, int> >&&'}
  401 |       operator=(typename conditional<
      |                 ~~~~~~~~~~~~~~~~~~~~~
  402 |   __and_<is_move_assignable<_T1>,
      |   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  403 |          is_move_assignable<_T2>>::value,
      |          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  404 |   pair&&, __nonesuch&&>::type __p)
      |   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/stl_pair.h:418:2: note: candidate: 'template<class _U1, class _U2> typename std::enable_if<std::__and_<std::is_assignable<_T1&, const _U1&>, std::is_assignable<_T2&, const _U2&> >::value, std::pair<_T1, _T2>&>::type std::pair<_T1, _T2>::operator=(const std::pair<_U1, _U2>&) [with _U1 = _U1; _U2 = _U2; _T1 = std::pair<int, int>; _T2 = std::pair<int, int>]'
  418 |  operator=(const pair<_U1, _U2>& __p)
      |  ^~~~~~~~
/usr/include/c++/10/bits/stl_pair.h:418:2: note:   template argument deduction/substitution failed:
timeismoney.cpp:131:108: note:   mismatched types 'const std::pair<_T1, _T2>' and 'void'
  131 |   edges2[cnt] = ({{it.fi.fi, it.fi.se}, {it.se.fi * mpp[answer.se].fi + it.se.se * mpp[answer.se].se, cnt}});
      |                                                                                                            ^
In file included from /usr/include/c++/10/bits/stl_algobase.h:64,
                 from /usr/include/c++/10/bits/specfun.h:45,
                 from /usr/include/c++/10/cmath:1927,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:41,
                 from timeismoney.cpp:5:
/usr/include/c++/10/bits/stl_pair.h:430:2: note: candidate: 'template<class _U1, class _U2> typename std::enable_if<std::__and_<std::is_assignable<_T1&, _U1&&>, std::is_assignable<_T2&, _U2&&> >::value, std::pair<_T1, _T2>&>::type std::pair<_T1, _T2>::operator=(std::pair<_U1, _U2>&&) [with _U1 = _U1; _U2 = _U2; _T1 = std::pair<int, int>; _T2 = std::pair<int, int>]'
  430 |  operator=(pair<_U1, _U2>&& __p)
      |  ^~~~~~~~
/usr/include/c++/10/bits/stl_pair.h:430:2: note:   template argument deduction/substitution failed:
timeismoney.cpp:131:108: note:   mismatched types 'std::pair<_T1, _T2>' and 'void'
  131 |   edges2[cnt] = ({{it.fi.fi, it.fi.se}, {it.se.fi * mpp[answer.se].fi + it.se.se * mpp[answer.se].se, cnt}});
      |                                                                                                            ^
timeismoney.cpp:135:6: warning: unused variable 'tol_a' [-Wunused-variable]
  135 |  int tol_a = 0, tol_b = 0;
      |      ^~~~~
timeismoney.cpp:135:17: warning: unused variable 'tol_b' [-Wunused-variable]
  135 |  int tol_a = 0, tol_b = 0;
      |                 ^~~~~