QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#730475 | #2512. Quality Monitoring | penguinman | WA | 149ms | 15148kb | C++23 | 4.2kb | 2024-11-09 20:22:58 | 2024-11-09 20:22:59 |
Judging History
answer
#include <bits/stdc++.h>
#define rep(i, n) for(ll i = 0; i < ll(n); i++)
#define rep2(i, s, n) for(ll i = ll(s); i < ll(n); i++)
#define rrep(i, n) for(ll i = ll(n) - 1; i >= 0; i--)
#define rrep2(i, n, t) for(ll i = ll(n) - 1; i >= ll(t); i--)
#define all(a) a.begin(), a.end()
#define SZ(a) ll(a.size())
#define eb emplace_back
using namespace std;
using ll = long long;
using P = pair<ll, ll>;
using vl = vector<ll>;
using vvl = vector<vl>;
using vp = vector<P>;
using vvp = vector<vp>;
template<typename T>
struct SegmentTree{
ll N;
T INF;
vector<T> node;
SegmentTree(ll n, T INF_):INF(INF_){
N = 1;
while(N <= n) N <<= 1;
node.resize(2*N, INF);
}
T compare(T A, T B){
return max(A, B);
}
void update(ll index, T val){
index += N;
node[index] = val;
while(index > 0){
index >>= 1;
node[index] = compare(node[index*2], node[index*2+1]);
}
}
T calc(ll left, ll right){
T ret = INF;
left += N;
right += N;
while(left < right){
if(left & 1) ret = compare(ret, node[left++]);
if(right & 1) ret = compare(ret, node[--right]);
left >>= 1;
right >>= 1;
}
return ret;
}
};
constexpr ll inf = LLONG_MAX/4;
SegmentTree<P> seg(0, make_pair(-inf, -inf));
ll n;
vvl edge;
vl cnt;
vector<bool> used;
void deactivate(ll now){
assert(!used[now]);
seg.update(now, make_pair(-inf, now));
used[now] = true;
for(auto next: edge[now]){
if(used[next]) continue;
cnt[next]--;
seg.update(next, make_pair(cnt[next],next));
}
}
void activate(ll now){
assert(used[now]);
seg.update(now, make_pair(-inf, now));
used[now] = false;
for(auto next: edge[now]){
if(used[next]) continue;
cnt[next]++;
seg.update(next, make_pair(cnt[next],next));
}
}
ll dfs(ll remain){
if(remain < 0) return -inf;
auto p = seg.calc(0, n);
if(p.first <= 1){
return remain;
}
if(p.first == 2){
vl cand;
rep(_,remain*2){
p = seg.calc(0, n);
if(p.first <= 1) break;
seg.update(p.second, make_pair(-inf, p.second));
cand.eb(p.second);
}
p = seg.calc(0, n);
if(p.first == 2){
for(auto s: cand) seg.update(s, make_pair(cnt[s], s));
return -inf;
}
vl visited;
for(auto s: cand){
if(used[s]) continue;
queue<ll> que;
que.push(s);
while(!que.empty()){
ll now = que.front(); que.pop();
visited.eb(now);
for(auto next: edge[now]){
if(used[next]) continue;
que.push(next);
used[next] = true;
}
}
remain -= SZ(visited)/2;
}
for(auto s: visited) used[s] = false;
for(auto s: cand) seg.update(s, make_pair(cnt[s], s));
return remain;
}
ll ret = -inf;
ll now = p.second;
if(p.first <= remain){
deactivate(now);
vl visited;
for(auto next: edge[now]){
if(used[next]) continue;
visited.eb(next);
deactivate(next);
}
ret = max(ret, dfs(remain-p.first));
reverse(all(visited));
for(auto next: visited) activate(next);
activate(now);
}
deactivate(now);
ret = max(ret, dfs(remain-1));
activate(now);
return ret;
}
int main(){
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cout.tie(nullptr);
cout << std::fixed << std::setprecision(15);
ll m; cin >> n >> m;
edge.resize(n);
rep(i,m){
ll x,y; cin >> x >> y;
edge[x].eb(y);
edge[y].eb(x);
}
cnt.resize(n);
seg = SegmentTree<P>(n, make_pair(-inf, -inf));
rep(i,n){
cnt[i] = SZ(edge[i]);
seg.update(i, make_pair(cnt[i],i));
}
used.resize(n);
ll ans = n-28+dfs(28);
if(ans < n-28) ans = -1;
cout << ans << endl;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 3624kb
input:
5 7 1 0 2 3 1 4 1 2 3 1 3 4 0 4
output:
2
result:
ok single line: '2'
Test #2:
score: 0
Accepted
time: 123ms
memory: 13704kb
input:
30000 375944 12559 10814 9056 27688 5877 12602 1201 26739 2268 25471 25051 3914 2521 13925 2917 17413 11167 13925 1701 11675 2808 2248 7812 7061 26498 5148 15427 22504 12220 13801 18271 2891 16610 7061 7229 15268 17211 13925 20474 25471 22342 27688 26021 25471 6162 10068 9514 10068 18765 13925 12554...
output:
29977
result:
ok single line: '29977'
Test #3:
score: 0
Accepted
time: 115ms
memory: 13560kb
input:
30000 356945 6424 27639 19167 15771 20217 9301 3509 12368 29642 23652 12026 9763 9162 15680 3708 26697 28749 29578 6123 27616 14643 14603 26017 974 29668 26697 25837 27616 9541 15680 24717 4166 2116 15771 26969 15680 29506 23512 25656 9763 16409 4318 4112 4166 26193 9763 12243 20771 28128 14603 2534...
output:
29978
result:
ok single line: '29978'
Test #4:
score: 0
Accepted
time: 146ms
memory: 15088kb
input:
30000 447182 5045 22932 2607 8671 4458 28955 22008 18570 556 26449 17825 26719 9171 28739 9100 8671 24209 18867 14917 26449 990 28955 4646 18231 17137 263 6245 18552 6298 9776 25093 28739 4187 18570 15563 18867 2408 10636 684 22932 1969 18288 12283 21389 18119 18062 9044 18062 7793 18288 6046 28955 ...
output:
29972
result:
ok single line: '29972'
Test #5:
score: 0
Accepted
time: 149ms
memory: 15148kb
input:
30000 449801 20814 1010 22105 26719 24289 17681 20455 12171 3400 11548 25655 18560 25656 8519 20035 11548 5668 23027 6922 9039 11754 17681 29503 12171 29175 16144 12653 22716 1018 11548 25047 8519 25504 4540 15494 13365 6994 8519 2752 20702 20437 20702 26287 3556 14044 16144 19756 28193 2804 1010 17...
output:
29972
result:
ok single line: '29972'
Test #6:
score: 0
Accepted
time: 148ms
memory: 14980kb
input:
30000 448836 4333 21012 14460 183 3407 29071 19979 24057 23440 12679 22726 5093 18058 16105 15819 7077 1536 23098 2410 23719 17396 22428 21522 29071 21021 18668 12378 16100 17689 19507 24255 10320 28454 22428 13879 27181 8655 12679 20663 16100 20670 23098 17800 7077 6850 19507 14258 24057 658 7476 1...
output:
29972
result:
ok single line: '29972'
Test #7:
score: 0
Accepted
time: 147ms
memory: 15000kb
input:
30000 450781 10425 14609 4712 25859 4746 14609 7289 5259 4650 17712 4582 9326 16546 13846 24488 17712 27707 20805 15740 5856 26904 14255 7596 29395 26999 6790 10815 24642 12542 13846 10290 27885 7922 14255 6004 25859 12132 17712 18000 14255 19323 5259 29932 5247 3273 27885 27078 20805 16827 5247 275...
output:
29972
result:
ok single line: '29972'
Test #8:
score: 0
Accepted
time: 149ms
memory: 15016kb
input:
30000 449381 26362 3564 12849 1851 13538 2180 16828 25259 11088 1851 26319 1804 1578 18533 4662 8965 23981 18533 25004 2090 17851 20707 19744 22702 1027 29749 20280 8965 22588 16201 14657 22702 16950 15918 25703 29749 4297 1804 7797 17614 3173 25588 20407 1851 20925 16201 13894 13698 28559 17530 337...
output:
29972
result:
ok single line: '29972'
Test #9:
score: 0
Accepted
time: 143ms
memory: 14668kb
input:
30000 435758 19333 4266 17204 19615 23214 27677 13985 17138 25946 17138 16050 25784 18291 25265 11473 6207 6622 27278 19498 24605 2119 2320 5613 25265 639 5500 4899 25265 14554 16251 16781 16109 20598 27677 25591 27278 29167 4571 21768 25265 757 4571 6218 25784 10798 22400 3257 6207 26835 15208 2218...
output:
29973
result:
ok single line: '29973'
Test #10:
score: 0
Accepted
time: 143ms
memory: 14668kb
input:
30000 434473 29316 20548 11357 16723 24595 15903 29449 17974 24831 16723 29495 17974 10854 21997 9283 13100 7509 17974 23175 21997 12639 27410 26476 7352 6229 8268 4327 21747 7393 9111 27373 7352 9015 27410 11844 21997 9153 15903 3261 27410 645 20161 5766 19917 18283 3086 5730 20161 25898 24408 8657...
output:
29973
result:
ok single line: '29973'
Test #11:
score: 0
Accepted
time: 141ms
memory: 14884kb
input:
30000 433552 23769 5804 8460 10895 10177 28282 24516 5804 2399 14306 2896 9423 4732 14306 29256 17928 16765 12330 2667 2706 9097 2281 24004 26030 12213 2706 23974 7599 23707 10895 731 7599 2879 22639 25132 14586 5912 10895 26928 3891 19180 17972 29935 10697 29366 21716 7079 10697 3508 17972 24271 27...
output:
29973
result:
ok single line: '29973'
Test #12:
score: 0
Accepted
time: 51ms
memory: 10036kb
input:
30000 194101 29208 3924 28953 3526 2926 23661 28908 28668 7500 25979 17745 12442 17931 23661 23892 21087 19866 12026 24160 7916 16592 12026 13031 3924 18212 28668 25017 25979 23826 28668 19203 3924 18291 12026 2459 7916 16231 25979 11553 3526 27426 21087 25469 17008 15214 7916 9491 17651 23667 12442...
output:
29989
result:
ok single line: '29989'
Test #13:
score: 0
Accepted
time: 72ms
memory: 10512kb
input:
30000 224602 10723 6633 28621 1462 25648 26308 25058 1462 7733 25014 8551 23591 29214 19636 11963 16657 22785 28301 27328 26308 10808 6633 9465 26308 2391 6633 20211 6452 5050 17444 9875 10367 17558 6452 11019 6633 6707 18076 11358 23591 17886 13906 20452 10367 11085 6633 2445 6633 7009 18076 5544 2...
output:
29987
result:
ok single line: '29987'
Test #14:
score: 0
Accepted
time: 81ms
memory: 10884kb
input:
30000 239634 17016 14893 21797 24610 9066 24610 7309 22817 16779 26282 24577 10631 9173 8632 2637 10631 10678 21462 5102 8632 16555 342 10111 13687 29824 8632 29674 342 11277 10631 25538 342 8952 8632 16069 13687 501 8555 19541 22817 27354 24610 11647 8555 4852 10631 25651 8632 4939 342 21022 10631 ...
output:
29986
result:
ok single line: '29986'
Test #15:
score: 0
Accepted
time: 42ms
memory: 8640kb
input:
30000 150605 19224 29834 12097 6862 2546 28339 2084 18547 18603 26256 14257 29834 28372 6862 7054 19590 19979 28339 9259 18547 19602 6862 4369 19590 180 6862 2330 6862 12586 26256 11043 6862 6724 28339 5876 6862 2331 28339 28567 28339 29739 19590 12603 20763 12325 29834 10673 29834 5489 6862 3537 68...
output:
29992
result:
ok single line: '29992'
Test #16:
score: 0
Accepted
time: 35ms
memory: 7820kb
input:
30000 104560 8966 6237 27438 5730 22667 6237 3437 5730 13066 25206 29440 4975 2013 25206 3743 10730 939 10730 20237 25206 4615 4975 24241 6237 18005 25206 21835 25206 29599 10730 6731 25206 15477 25206 29781 6237 14851 10730 5372 6237 1429 5730 24760 4975 21612 25206 20862 25206 22684 25206 22155 49...
output:
29995
result:
ok single line: '29995'
Test #17:
score: 0
Accepted
time: 4ms
memory: 4564kb
input:
300 44850 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 46 0 47 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60...
output:
-1
result:
ok single line: '-1'
Test #18:
score: 0
Accepted
time: 38ms
memory: 11300kb
input:
1000 499500 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 46 0 47 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 ...
output:
-1
result:
ok single line: '-1'
Test #19:
score: 0
Accepted
time: 86ms
memory: 13384kb
input:
20000 388901 0 8631 0 18137 0 861 0 11174 0 16527 0 9727 1 10418 1 6932 1 16527 1 10868 1 18860 1 18137 1 13224 1 8631 1 19524 1 13119 1 10811 1 11174 1 16047 1 9772 1 8691 1 440 1 847 1 1402 1 15387 1 16134 1 861 1 19383 1 13645 1 2257 1 15904 1 4102 1 16742 1 19304 1 18669 1 13682 1 327 1 12700 1 ...
output:
-1
result:
ok single line: '-1'
Test #20:
score: 0
Accepted
time: 83ms
memory: 13424kb
input:
20000 397976 0 16863 0 7271 0 18514 0 13150 0 11405 0 1498 0 15159 0 7012 0 5763 0 8848 0 15400 0 13138 0 15467 0 4297 0 3368 0 5857 0 6814 0 10485 0 1409 0 2231 0 15766 0 15387 0 12657 0 2474 0 4250 0 18422 0 16138 0 11371 0 10495 0 16203 0 2567 1 3368 1 17614 1 7012 1 18514 1 13138 1 16138 1 18422...
output:
-1
result:
ok single line: '-1'
Test #21:
score: 0
Accepted
time: 51ms
memory: 12972kb
input:
10000 395291 0 284 0 6654 0 6829 0 7809 0 4412 0 3030 0 9705 0 5966 0 772 1 6095 1 1979 1 5935 1 6551 1 2475 1 5122 1 6019 1 1186 1 1730 1 3250 1 4350 1 8040 1 2741 1 6486 1 6654 1 2558 1 4564 1 5966 1 6608 1 7825 1 8821 1 219 1 1006 1 4291 1 165 1 9705 1 6390 1 7359 1 2624 1 2579 1 5830 1 3391 1 13...
output:
-1
result:
ok single line: '-1'
Test #22:
score: 0
Accepted
time: 67ms
memory: 13064kb
input:
15000 433562 0 13668 0 2721 0 14725 0 795 0 10928 0 7169 0 4483 0 3249 0 2691 0 247 0 3108 0 2775 0 3131 0 14146 0 6189 0 8397 0 14713 0 8154 0 4486 0 4146 0 7071 0 3971 0 14359 0 434 0 4944 0 11818 0 7936 0 7478 0 13256 0 5474 0 13296 0 2754 0 6015 0 13833 0 10425 0 8537 1 4146 1 3108 1 8154 1 1332...
output:
-1
result:
ok single line: '-1'
Test #23:
score: -100
Wrong Answer
time: 0ms
memory: 3780kb
input:
2 1 0 1
output:
2
result:
wrong answer 1st lines differ - expected: '1', found: '2'