Language: C++

// #pragma GCC optimize("Ofast,no-stack-protector")
// #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,tune=native")

#pragma GCC optimize("O3")
//(UNCOMMENT WHEN HAVING LOTS OF RECURSIONS)\
#pragma comment(linker, "/stack:200000000")
//(UNCOMMENT WHEN NEEDED)
#pragma GCC optimize("Ofast,unroll-loops,no-stack-protector,fast-math")\
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")

#include <bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>

using namespace std ;
using namespace __gnu_pbds;

#define reMin(a, b) a = min(a, b)
#define reMax(a, b) a = max(a, b)

#define lint long long
#define pb push_back
#define sz(x) (int)x.size()
#define all(x) begin(x), end(x)
#define SET(x, val) memset(x, val, sizeof(x))
#define fastio ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0)

typedef vector < int > vi ;
typedef pair < int, int > pii ;

const int N = 1e6 + 2 ;
const int MOD = 1e9 + 7 ;
const lint INF = 1e18 ;

vector<int> a[N];
int sz[N];
int level[N];
int par[N]; int atTime[N] ;
pii thisTime[N] ;
int tin[N], tout[N];
int w[N];
int n, q ;
int X, Y ;
int timer = 0;

/*
struct HASH{
  size_t operator()(const pair<int,int>&x)const{
    return hash<long long>()(((long long)x.first)^(((long long)x.second)<<32));
  }
};
*/
// unordered_map< pair <int,int>,int,HASH> wt, length ;
// unordered_map < pair < int, int > , int > wt, length ;
map < pair < int, int > , int > wt, length ;

bool cmp(int x, int y)
{
    return sz[x] > sz[y] ;
}

void dfs(int v, int p = -1) {
	par[v] = p;
	auto it = find(all(a[v]), p);
	if (it != a[v].end()) {
		a[v].erase(it);
	}
	for (int x : a[v]) {
		level[x] = level[v] + 1;
		dfs(x, v);
		sz[v] += sz[x];
	}
	++sz[v];
	sort(all(a[v]), cmp);
}

inline int get(int t1, int t2)
{
    int ans = 0 ;
    for(int i = t1; i < t2; i++)
    {
        if(thisTime[i].first == X) ans += Y ;
        else ans += thisTime[i].second ;
        // cout << atTime[i] << endl ;
    }
    return ans ;
}

void dfsOrder(int v, int p = -1) {
    if(p != -1)
        thisTime[timer] = { wt[{v, p}], length[{v, p}] } ;
    else
        thisTime[timer] = {0, 0} ;

    atTime[timer] = v ;

	tin[v] = timer++;
	if (!a[v].empty()) {
		w[a[v][0]] = w[v];
	}
	for (int x : a[v]) {
		dfsOrder(x, v);
	}
	tout[v] = timer;
}

bool isPar(int u, int v) {
	return tin[u] <= tin[v] && tout[u] >= tout[v];
}

int getAnswer(int u, int v)
{
    int ans = 0 ;
    // cout << "Doing " << u << endl ;
	while (!isPar(w[u], v)) {
        ans += get(tin[w[u]], tin[u] + 1);
		u = par[w[u]];
		// cout << u << endl ;
	}
	// cout << "Doing " << v << endl ;
	while (w[v] != w[u]) {
        ans += get(tin[w[v]], tin[v] + 1);
		v = par[w[v]];
		/// cout << v << endl ;
	}
	// cout << "Merging " << ans << endl ;
	ans += get(min(tin[u], tin[v]), max(tin[u], tin[v]) + 1 );
	// cout << endl ;
	return ans ;
}

int main()
{
    fastio; cin >> n >> q ; int u, v, c, d ;
    for(int i = 1; i < n; i++)
    {
        cin >> u >> v >> c >> d ; u-- ; v-- ;
        wt[{u, v}] = wt[{v, u}] = c ;
        length[{u, v}] = length[{v, u}] = d ;
        a[u].push_back(v); a[v].push_back(u);
    }
    dfs(0);
    iota(w, w+n, 0);
    dfsOrder(0);
    while(q--)
    {
        cin >> X >> Y >> u >> v ; u-- ; v-- ;
        cout << getAnswer(u, v) << "\n" ;
    }
}

/*

int main() {
	int n = nxt(), q = nxt();
	vector<int> curk(n);
	vector<long long> curb(n);
	for (int i = 0; i < n; ++i) {
		curk[i] = nxt();
	}
	for (int i = 0; i < n; ++i) {
		scanf("%lld", &curb[i]);
	}

	for (int i = 0; i < n - 1; ++i) {
		int u = nxt() - 1, v = nxt() - 1;
		a[u].push_back(v);
		a[v].push_back(u);
	}
	dfs(0);
	iota(w, w + n, 0);
	dfsOrder(0);
	for (int i = 0; i < n; ++i) {
		k[tin[i]] = curk[i];
		b[tin[i]] = curb[i];
	}

	while (q--) {
		int t = nxt(), u = nxt() - 1, v = nxt() - 1;
		if (t == 1) {
			int x = nxt();
			long long y;
			scanf("%lld", &y);
			incAll(u, v, x, y);
		} else {
			long long z;
			scanf("%lld", &z);
			printf("%lld\n", getAnswer(u, v, z));
		}
	}
	return 0;
}
*/



Compiler output:
a.cc:9:1: error: stray '#' in program
    9 | #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
      | ^
a.cc:9:2: error: '#pragma GCC optimize' string is badly formed
    9 | #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
      |  ^~~~~~