QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#291915 | #7118. Closing Time | Feet_McYeet | Compile Error | / | / | C++17 | 2.2kb | 2023-12-27 13:30:08 | 2024-04-28 08:00:19 |
Judging History
你现在查看的是最新测评结果
- [2024-04-28 08:00:19]
- 管理员手动重测本题所有提交记录
- 测评结果:Compile Error
- 用时:0ms
- 内存:0kb
- [2023-12-27 13:30:08]
- 评测
- 测评结果:Compile Error
- 用时:0ms
- 内存:0kb
- [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