ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#214011 | #2400. 椅子 | N | 50 | 351ms | 42772kb | C++11 | 4.2kb | 2024-11-14 22:32:01 | 2024-11-14 23:11:03 |
answer
//
// na 2400-re.cpp
// Competitive Programming
//
// Created by m2 on 2024/11/14.
//
#include <stdio.h>
#include <iostream>
#include <vector>
#include <random>
#include <time.h>
using namespace std;
//#define RNDDATA
//#define BBBBIG
const int maxn = 2e5 + 5, maxm = 2e5 + 5;
#if defined(MAC_OS_VERSION_11_0) && !defined(BBBBIG)
const int maxv = 10 * 4, maxe = 10 * 8;
#else
const int maxv = maxm * 4, maxe = maxm * 8;
#endif
int dep[maxv], ec[maxe * 2], en, S, E, saved[maxe * 2];
vector<int> to[maxv], ei[maxv];
struct Edge{
int u, v, w;
Edge(int u, int v, int w): u(u), v(v), w(w) {}
inline bool operator < (const Edge &other) const{
return w > other.w;
}
};
vector<Edge> es;
inline void real_edge(int u, int v, int w){
to[u].push_back(v);
to[v].push_back(u);
ei[u].push_back(en);
ei[v].push_back(en ^ 1);
ec[en] = w;
ec[en ^ 1] = 0;
en += 2;
}
inline void edge(int u, int v, int w){
// cerr << u << ' ' << v << ' ' << w << endl;
// es.push_back(Edge(u, v, w));
real_edge(u, v, w);
}
int que[maxv], qs, qe;
inline bool bfs(){
for(int i = 0; i <= E; ++i)
dep[i] = 0;
dep[S] = 1;
qs = 0;
qe = 0;
que[qe++] = S;
int node, nn;
while(qs < qe){
node = que[qs++];
for(int i = 0; i < to[node].size(); ++i){
nn = to[node][i];
if(!dep[nn] && ec[ei[node][i]] > 0){
dep[nn] = dep[node] + 1;
if(nn == E)
return true;
que[qe++] = nn;
}
}
}
return false;
}
int dinic(int node, int flow){
if(node == E)
return flow;
int unf = flow, nn, nw, nf;
for(int i = 0; i < to[node].size(); ++i){
nn = to[node][i];
nw = ec[ei[node][i]];
if(dep[nn] == dep[node] + 1 && nw > 0){
nf = dinic(nn, min(nw, unf));
if(!nf)
dep[nn] = 0;
unf -= nf;
ec[ei[node][i]] -= nf;
ec[ei[node][i] ^ 1] += nf;
if(!unf)
break;
}
}
return flow - unf;
}
int n, m;
const int its_a_me = 4;
int main(){
cin.tie(0)->sync_with_stdio(false);
cin >> n >> m;
#ifdef MAC_OS_VERSION_11_0
time_t st = clock();
#endif
S = 0;
E = m * 4 + 1;
for(int i = 1; i <= m; ++i){
edge(m * 3 + i, E, 1);
edge(m * 2 + i, m * 3 + i, 1);
if(i != 1)
edge(m * 2 + i, m * 2 + i - 1, i - 1);
edge(m + i, m * 3 + i, 1);
if(i != m)
edge(m + i, m + i + 1, m - i);
edge(S, i, 1);
}
#if defined(MAC_OS_VERSION_11_0) && defined(RNDDATA)
mt19937 rnd(114514);
uniform_int_distribution<> dist(1, m + 1);
// if(its_a_me == 4)
// cerr << "[ " << m / 3 << " " << m * 2 / 3 << " ]" << endl;
#endif
for(int i = 1; i <= n; ++i){
int l, r;
#if defined(MAC_OS_VERSION_11_0) && defined(RNDDATA)
if(its_a_me == 1){
l = dist(rnd);
r = dist(rnd);
}else if(its_a_me == 2){
l = i;
r = i;
}else if(its_a_me == 3){
l = i;
r = n - i;
}else if(its_a_me == 4){
l = m / 3;
r = m * 2 / 3;
}
if(l > r)
swap(l, r);
#else
cin >> l >> r;
#endif
if(l != 0)
edge(i, m * 2 + l, 1);
if(r != m + 1)
edge(i, m + r, 1);
}
// sort(es.begin(), es.end());
int ans = 0;
int ptr = 0;
// for(int clim = (1 << 20); clim; clim >>= 1){
// while(ptr < es.size() && es[ptr].w >= clim){
// real_edge(es[ptr].u, es[ptr].v, es[ptr].w);
// ++ptr;
// }
while(bfs()){
ans += dinic(S, n);
// for(int i = 0; i < en; ++i)
// if(i & 1){
// saved[i] = ec[i];
// ec[i] = 0;
// }
}
// }
cout << n - ans << endl;
#ifdef MAC_OS_VERSION_11_0
cerr << "time: " << double(clock() - st) / CLOCKS_PER_SEC * 1000 << " ms" << endl;
#endif
return 0;
}
详细
小提示:点击横条可展开更详细的信息
Test #1:
score: 5
Accepted
time: 3ms
memory: 38776kb
input:
8 8 1 8 1 5 2 8 0 5 0 3 2 6 2 6 2 6
output:
1
result:
ok single line: '1'
Test #2:
score: 5
Accepted
time: 8ms
memory: 38780kb
input:
10 10 0 5 2 9 3 10 2 7 1 6 0 10 0 9 2 10 0 9 1 10
output:
2
result:
ok single line: '2'
Test #3:
score: 5
Accepted
time: 11ms
memory: 38788kb
input:
20 20 4 16 2 11 3 19 6 12 7 18 1 14 4 10 5 20 6 14 8 17 1 12 2 11 7 18 7 15 0 15 1 12 2 19 7 13 4 10...
output:
1
result:
ok single line: '1'
Test #4:
score: 5
Accepted
time: 4ms
memory: 38816kb
input:
96 93 2 67 5 61 4 74 15 68 3 63 40 91 14 58 6 66 9 57 18 85 13 63 40 85 17 89 16 73 10 72 15 74 15 6...
output:
7
result:
ok single line: '7'
Test #5:
score: 5
Accepted
time: 8ms
memory: 38824kb
input:
100 100 29 70 17 68 25 77 13 74 9 79 42 90 34 99 18 100 3 80 21 71 26 63 6 54 43 89 41 78 19 78 13 9...
output:
2
result:
ok single line: '2'
Test #6:
score: 5
Accepted
time: 9ms
memory: 39160kb
input:
952 954 182 871 114 769 110 694 91 741 22 509 53 841 124 858 16 465 160 789 24 720 96 939 56 689 313...
output:
64
result:
ok single line: '64'
Test #7:
score: 5
Accepted
time: 11ms
memory: 39184kb
input:
1000 1000 74 795 175 641 39 618 19 971 162 873 93 731 480 989 357 932 4 693 266 965 89 581 47 560 27...
output:
74
result:
ok single line: '74'
Test #8:
score: 5
Accepted
time: 51ms
memory: 40396kb
input:
4516 4690 665 4024 1062 3765 1573 4200 1035 4155 441 2678 31 3472 87 3450 146 2286 310 4267 1231 450...
output:
69
result:
ok single line: '69'
Test #9:
score: 5
Accepted
time: 63ms
memory: 40660kb
input:
5000 5000 62 4476 1146 3647 531 4569 1042 3464 2044 4817 2186 4584 2223 4892 1224 4761 1154 4943 147...
output:
250
result:
ok single line: '250'
Test #10:
score: 0
Wrong Answer
time: 55ms
memory: 41192kb
input:
10000 5000 1106 4454 1138 4746 926 4805 609 4507 259 4543 1435 4211 790 3399 528 3426 38 4665 87 404...
output:
5490
result:
wrong answer 1st lines differ - expected: '5347', found: '5490'
Test #11:
score: 5
Accepted
time: 128ms
memory: 42772kb
input:
10000 10000 2224 8599 3697 9779 1264 7760 266 8474 601 9386 5276 9907 4231 9619 2206 8589 3306 9731 ...
output:
574
result:
ok single line: '574'
Test #12:
score: 0
Time Limit Exceeded
input:
93875 99655 0 25859 0 30798 0 89053 0 29230 0 93483 0 83280 0 47502 0 39669 0 69861 0 64184 0 35067 ...
output:
result:
Test #13:
score: 0
Time Limit Exceeded
input:
100000 100000 0 50602 0 56129 0 65965 0 75241 0 71832 0 26413 0 79671 0 73842 0 78772 0 94149 0 3483...
output:
result:
Test #14:
score: 0
Time Limit Exceeded
input:
91057 96847 21419 89318 2406 89095 2941 51033 14888 77083 28023 74840 18260 62296 6297 51346 7735 88...
output:
result:
Test #15:
score: 0
Time Limit Exceeded
input:
100000 100000 16723 78322 7205 66894 9839 72285 7661 85725 38680 93140 6182 88375 30785 99006 38538 ...
output:
result:
Test #16:
score: 0
Time Limit Exceeded
input:
198495 197435 63738 165927 17757 117506 9207 170263 50748 141346 18132 120887 49285 188664 25304 190...
output:
result:
Test #17:
score: 0
Time Limit Exceeded
input:
199260 192470 22818 156104 9228 171776 43025 139453 39938 135662 18272 171006 68109 171295 28220 116...
output:
result:
Test #18:
score: 0
Time Limit Exceeded
input:
200000 200000 75002 167675 8656 181873 54606 156991 48075 167451 74414 194621 55633 180796 4565 1657...
output:
result:
Test #19:
score: 0
Time Limit Exceeded
input:
200000 200000 59298 170956 2760 194028 35447 153792 1945 163425 73195 176225 62065 185526 85886 1916...
output:
result:
Test #20:
score: 0
Time Limit Exceeded
input:
200000 200000 67496 171474 36806 170296 86759 193181 7951 171117 85324 184470 8949 171983 10465 1547...