QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#291915#7118. Closing TimeFeet_McYeetCompile Error//C++172.2kb2023-12-27 13:30:082024-04-28 08:00:19

Judging History

你现在查看的是最新测评结果

  • [2024-04-28 08:00:19]
  • 管理员手动重测本题所有提交记录
  • [2023-12-27 13:30:08]
  • 评测
  • [2023-12-27 13:30:08]
  • 提交

answer

#include "closing.h"
#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize ("Ofast")
#pragma GCC target ("avx2")
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<long long, long long> pll;
#define el << '\n'
#define nl cout << '\n'
#define spc << ' '
#define forn(i,n) for (int i=0; i<n; i++)
#define forl(i,s,e) for (int i=s; i<e; i++)
#define pb push_back
#define fi first
#define se second
#define rsz resize
#define sz(x) ((int) x.size())
#define all(x) x.begin(), x.end()
 
const int MAXN = 200005;
 
pll dis[MAXN];
 
vector<pll> adj[MAXN];
 
void dfs(int cn, int pn, ll d, bool p) {
	if (p) dis[cn].se = d;
	else dis[cn].fi = d;
	for (pii i : adj[cn]) if (i.fi != pn) dfs(i.fi, cn, d+i.se, p);
}
 
int max_score(int N, int X, int Y, ll K, int U[], int V[], int W[]) {
	forn(i,N) adj[i].clear();
	forn(i,N-1) {
		adj[U[i]].pb({V[i], W[i]});
		adj[V[i]].pb({U[i], W[i]});
	}
	dfs(X, -1, 0, 0);
	dfs(Y, -1, 0, 1);
	forn(i,N) if (dis[i].fi < dis[i].se) swap(dis[i].fi, dis[i].se);
	sort(dis,dis+N);
	bool u[N];
	forn(i,N) u[i] = false;
	priority_queue<pair<ll, int>, vector<pair<ll, int>>, greater<pair<ll, int>>> pq;
	priority_queue<pair<ll, int>> rpq;
	// forn(i,N) cout << dis[i].fi spc << dis[i].se el;
	// nl;
	forn(i,N) pq.push({dis[i].se, i});
	int tot = 0;
	while (1) {
		ll temp = K - pq.top().fi;
		if (temp < 0) break;
		u[pq.top().se] = 1;
		rpq.push(pq.top());
		pq.pop();
		K = temp;
		tot++;
	}
	// cout << K spc << tot el;
	int ans = tot;
	forn(i,N) {
		if (u[i]) {
			K += dis[i].se;
			tot--;
		}
		K -= dis[i].fi;
		tot += 2;
		bool temp = false;
		while (K<0) {
			if (!sz(rpq)) {
				temp = true;
				break;
			}
			auto cn = rpq.top();
			rpq.pop();
			if (cn.se <= i) continue;
			tot--;
			K += cn.fi;
		}
		if (temp) break;
		ans = max(ans, tot);
	}
	return tot;
 	
}
 
// int main() {
// 	cin.tie(NULL);
// 	ios_base::sync_with_stdio(false);
// 	int t; cin >> t;
// 	while (t--) {
// 		int n, x, y; ll k; cin >> n >> x >> y >> k;
// 		int u[n-1], v[n-1], w[n-1];
// 		forn(i,n-1) cin >> u[i] >> v[i] >> w[i];
// 		cout << max_score(n, x, y, k, u, v, w) el;
// 	}
// }

详细

/usr/bin/ld: /tmp/cc4wdHsw.o: in function `main':
implementer.cpp:(.text.startup+0x74c): undefined reference to `max_score(int, int, int, long long, std::vector<int, std::allocator<int> >, std::vector<int, std::allocator<int> >, std::vector<int, std::allocator<int> >)'
collect2: error: ld returned 1 exit status