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...