Submission #1184937

#TimeUsernameProblemLanguageResultExecution timeMemory
1184937SmuggingSpunTwo Currencies (JOI23_currencies)C++20
10 / 100
62 ms10820 KiB
#include<bits/stdc++.h>
#define taskname "A"
using namespace std;
typedef long long ll;
const int lim = 1e5 + 5;
int n, m, q, u[lim], v[lim];
vector<int>g[lim], c[lim];
namespace sub1{
	void solve(){
		queue<int>Q;
		vector<int>h(n + 1, -1), parent(n + 1);
		vector<vector<int>>value(n + 1);
		Q.push(parent[1] = h[1] = 1);
		while(!Q.empty()){
			int s = Q.front();
			Q.pop();
			for(int& i : g[s]){
				int d = u[i] ^ v[i] ^ s;
				if(h[d] == -1){
					h[d] = h[parent[d] = s] + 1;
					value[d] = c[i];
					Q.push(d);
				}
			}
		}
		for(int _ = 0; _ < q; _++){
			int s, t, x;
			ll y;
			cin >> s >> t >> x >> y;
			vector<int>path_value;
			while(s != t){
				if(h[s] < h[t]){
					swap(s, t);
				}
				for(int& x : value[s]){
					path_value.emplace_back(x);
				}
				s = parent[s];
			}
			sort(path_value.begin(), path_value.end());
			int p = path_value.size();
			for(int i = 0; i < path_value.size(); i++){
				if((y -= path_value[i]) < 0){
					p = i;
					break;
				}
			}
			cout << max(-1, x - int(path_value.size()) + p) << "\n";
		}
	}
}
namespace sub23{
	struct Node{
		int lc, rc, cnt;
		ll sum;
		Node(){
			this->lc = this->rc = -1;
			this->cnt = 0;
			this->sum = 0;
		}	
	};
	vector<Node>st;
	void solve(){
		
	}
}
int main(){
	ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	if(fopen(taskname".inp", "r")){
		freopen(taskname".inp", "r", stdin);
	}
	cin >> n >> m >> q;
	for(int i = 1; i < n; i++){
		cin >> u[i] >> v[i];
		g[u[i]].emplace_back(i);
		g[v[i]].emplace_back(i);
	}
	memset(c, 0, sizeof(c));
	for(int i = 0; i < m; i++){
		int p, x;
		cin >> p >> x;
		c[p].emplace_back(x);
	}
	if(max(max(n, m), q) <= 2000){
		sub1::solve();
	}
	else{
		sub23::solve();
	}
}

Compilation message (stderr)

currencies.cpp: In function 'int main()':
currencies.cpp:70:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   70 |                 freopen(taskname".inp", "r", stdin);
      |                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...