Submission #953399

#TimeUsernameProblemLanguageResultExecution timeMemory
953399YassirSalamaTwo Currencies (JOI23_currencies)C++17
0 / 100
3 ms15964 KiB
#include <bits/stdc++.h>
using namespace std;
const int dx[4] = {1,0,-1,0}, dy[4] = {0,1,0,-1};
#define OVL(x,s) for(auto y:x) cout<<y<<s; cout<<"\n";
#ifdef IOI
void dbg_out() { cout << endl; }
template<typename Head, typename... Tail> void dbg_out(Head H, Tail... T) { cout << ' ' << H; dbg_out(T...); }
#define dbg(...) cout << "(" << #__VA_ARGS__ << "):", dbg_out(__VA_ARGS__);
#else
#define dbg(...) 1337;
#endif
#define endl "\n"
#define pb push_back
#define F first
#define S second
#define ll long long
#define mod 1000000007
#define all(v) v.begin(),v.end()
#define int long long
const int MAXN=2e5+100;
const int LOGN=21;
vector<int> v[MAXN];
int depth[MAXN];
vector<int> c[MAXN];
int up[MAXN][LOGN+1];
vector<pair<int,int>> edges;
map<pair<int,int>,int> mp;
int p[MAXN];
int ff[MAXN];
void dfs(int node,int par){
	depth[node]=depth[par]+1;
	up[node][0]=par;
	p[node]=par;
	ff[node]=ff[par]+c[mp[{node,par}]].size();
	for(int i=1;i<LOGN;i++){
		up[node][i]=up[up[node][i-1]][i-1];
	}
	for(auto x:v[node]){
		if(x==par) continue;
		dfs(x,node);
	}
}
int LCA(int a,int b){
	if(depth[a]<depth[b]) swap(a,b);
	int d=depth[a]-depth[b];
	for(int i=LOGN-1;i>=0;i--){
		if((1<<i)&d){
			a=up[a][i];
		}
	}
	if(a==b) return a;
	for(int i=LOGN-1;i>=0;i--){
		if(up[a][i]!=up[b][i]){
			a=up[a][i];
			b=up[b][i];
		}
	}
	return up[a][0];
}
signed main(){
ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
int n,m,q;
cin>>n>>m>>q;
for(int i=0;i<n-1;i++){
	int a,b;
	cin>>a>>b;
	v[a].pb(b);
	v[b].pb(a);
	edges.pb({a,b});
	mp[{a,b}]=mp[{b,a}]=i;
}
int c1=0;
for(int i=0;i<m;i++){
	int t;
	int d;
	cin>>t>>d;
    t--;
    c1=d;
    int a=edges[t].F;
    int b=edges[t].S;
    c[t].pb(d);
}
for(int i=0;i<n;i++){
	sort(all(c[i]));
}
dfs(1,1);
while(q--){
	int a,b,x,y;
	cin>>a>>b>>x>>y;
	int l=LCA(a,b);
	int k=ff[a]+ff[b]-2*ff[l];
	y/=c1;
	vector<int> d;
	while(a!=l){
		int t=p[a];
		for(auto x:c[mp[{a,t}]]) d.pb(x);
		a=p[a];
	}
	while(b!=l){
		int t=p[b];
		for(auto x:c[mp[{b,t}]]) d.pb(x);
		b=p[b];
	}
	// dbg(d.size(),k)
	assert((d.size())==k);
	// sort(all(d));
	int f=k-y;
	if(x>=f){
		cout<<x-f<<endl;
		continue;
	}else cout<<-1<<endl;
}
}

Compilation message (stderr)

currencies.cpp: In function 'int main()':
currencies.cpp:79:9: warning: unused variable 'a' [-Wunused-variable]
   79 |     int a=edges[t].F;
      |         ^
currencies.cpp:80:9: warning: unused variable 'b' [-Wunused-variable]
   80 |     int b=edges[t].S;
      |         ^
In file included from /usr/include/c++/10/cassert:44,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:33,
                 from currencies.cpp:1:
currencies.cpp:105:19: warning: comparison of integer expressions of different signedness: 'std::vector<long long int>::size_type' {aka 'long unsigned int'} and 'long long int' [-Wsign-compare]
  105 |  assert((d.size())==k);
      |         ~~~~~~~~~~^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...