QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#466225 | #1878. No Rest for the Wicked | GenshinImpactsFault | WA | 3ms | 28304kb | C++14 | 1.9kb | 2024-07-07 17:02:31 | 2024-07-07 17:02:32 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
const int N = 400010;
int n, m;
int c[N], t[N], s[N];
int id[N];
struct Edge {
int x, y, w;
}; Edge edge[N];
int tot, fa[N];
vector<int> e[N];
int dfn[N], low[N], rev[N], idx = 0, f[N][20], dep[N];
int ans[N];
set<pair<int, int> > st;
int find(int x) {
return x == fa[x] ? x : fa[x] = find(fa[x]);
}
void dfs(int u, int ff) {
dep[u] = dep[ff] + 1, f[u][0] = ff;
for(int i = 1; i <= 19; i++) f[u][i] = f[f[u][i - 1]][i - 1];
dfn[u] = ++idx, rev[idx] = u;
if(u <= n) st.insert({dfn[u], u});
for(auto v : e[u]) dfs(v, u);
low[u] = idx;
}
int main() {
ios::sync_with_stdio(0); cin.tie(nullptr);
cin >> n >> m;
for(int i = 1; i <= n; i++) {
cin >> c[i] >> t[i] >> s[i];
id[i] = i;
}
c[n + 1] = 1e9 + 10, t[n + 1] = 0, s[n + 1] = 0;
sort(id + 1, id + n + 1, [](int x, int y) { return s[x] > s[y]; });
for(int i = 1; i <= m; i++) {
cin >> edge[i].x >> edge[i].y;
edge[i].w = max(c[edge[i].x], c[edge[i].y]);
}
for(int i = 1; i <= n; i++) {
edge[m + i] = {1, n + 1, (int)1e9 + 10};
}
m += n;
sort(edge + 1, edge + m + 1, [](Edge x, Edge y) { return x.w < y.w; });
tot = n + 1;
for(int i = 1; i <= n + 1; i++) fa[i] = i;
for(int i = 1; i <= m; i++) {
int x = edge[i].x, y = edge[i].y, w = edge[i].w;
x = find(x), y = find(y); if(x == y) continue;
++tot, fa[x] = fa[y] = fa[tot] = tot, c[tot] = w;
e[tot].push_back(x), e[tot].push_back(y);
}
dfs(tot, 0);
for(int i = 1; i <= n; i++) {
int u = id[i], x = u;
for(int j = 19; ~j; j--) {
if(!f[x][j]) continue;
if(c[f[x][j]] <= t[u]) x = f[x][j];
}
for(;;) {
set<pair<int, int> >::iterator it = st.lower_bound({dfn[x], 0});
if(it == st.end() || it->first > low[x]) break;
ans[it->second] = s[u];
st.erase(it);
}
}
for(int i = 1; i <= n; i++) cout << ans[i] << " \n"[i == n];
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 26104kb
input:
4 3 2 3 1 1 1 4 1 2 2 1 1 3 1 2 1 3 1 4
output:
2 4 2 3
result:
ok 4 number(s): "2 4 2 3"
Test #2:
score: 0
Accepted
time: 0ms
memory: 28216kb
input:
1 0 138088047 507565360 682493255
output:
682493255
result:
ok 1 number(s): "682493255"
Test #3:
score: 0
Accepted
time: 0ms
memory: 26220kb
input:
4 4 1 4 3 2 4 2 2 4 3 3 4 4 1 2 1 3 2 3 3 4
output:
4 4 4 4
result:
ok 4 number(s): "4 4 4 4"
Test #4:
score: 0
Accepted
time: 0ms
memory: 28304kb
input:
4 6 178072496 839649317 45448733 194708659 935253395 946862151 18249835 428083054 205076387 264987407 972905801 813257839 1 2 1 3 1 4 2 3 2 4 3 4
output:
946862151 946862151 946862151 946862151
result:
ok 4 number(s): "946862151 946862151 946862151 946862151"
Test #5:
score: 0
Accepted
time: 3ms
memory: 28204kb
input:
6 9 28300078 870529222 753188708 536298772 594473950 960983978 529901549 892644015 629235196 243957096 964819865 557992404 816732311 926011948 125114736 542880646 854233712 893836623 1 4 1 6 2 3 2 5 2 6 3 4 3 5 4 5 5 6
output:
960983978 960983978 960983978 960983978 893836623 960983978
result:
ok 6 numbers
Test #6:
score: -100
Wrong Answer
time: 0ms
memory: 28240kb
input:
8 12 145668143 803690704 831047661 521729328 779388601 536431978 431184019 964406648 502003747 576412706 849278976 294536686 192427822 686389291 757517237 233074855 931142020 210401181 471103022 766254684 616437478 428586523 540241082 342381939 1 2 1 3 1 4 1 6 1 7 1 8 2 4 2 6 2 8 3 4 4 6 4 7
output:
831047661 831047661 831047661 831047661 0 831047661 831047661 831047661
result:
wrong answer 5th numbers differ - expected: '757517237', found: '0'