# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
435016 |
2021-06-22T19:35:43 Z |
grt |
Keys (IOI21_keys) |
C++17 |
|
2500 ms |
203368 KB |
#include <bits/stdc++.h>
#define ST first
#define ND second
#define PB push_back
using namespace std;
using ll = long long;
using pi = pair<int,int>;
using vi = vector<int>;
const int nax = 300 * 1000 + 10, INF = 1e9;
int n, m, nr;
map<int, vi>V[nax];
bool vis[2 * nax];
vi seen;
vi G[2 * nax];
vi Grev[2 * nax];
int topo[2 * nax];
int SCC[2 * nax];
bool ok[2 * nax];
int color;
int cc[nax];
int cnt[2 * nax], rep[2 * nax];
bool visited[nax];
bool done[nax];
vi verToAC[nax];
vector<pi>V2[nax];
void dfs(int x, int col) {
vis[x] = true;
seen.PB(x);
for(auto ed : V[col][x]) if(!vis[ed]) {
dfs(ed, col);
}
}
void dfs2(int x) {
vis[x] = true;
for(int nbh : G[x]) {
if(!vis[nbh]) {
dfs2(nbh);
}
}
topo[nr++] = x;
}
void dfs3(int x) {
vis[x] = true;
SCC[x] = color;
if(x < n) rep[color] = x;
if(x < n) cnt[color]++;
for(int nbh : Grev[x]) if(!vis[nbh]) {
dfs3(nbh);
}
}
queue<int>Q;
vi saw, sawC;
void dfss(int x) {
visited[x] = true;
saw.PB(x);
//cout << "VER: " << x << "\n";
Q.push(cc[x]);
for(auto nbh : V2[x]) if(!visited[nbh.ST]) {
if(done[nbh.ND]) {
dfss(nbh.ST);
} else {
verToAC[nbh.ND].PB(nbh.ST);
sawC.PB(nbh.ND);
}
}
}
vi alg(int x) {
saw = {};
sawC = {};
//for(int i = 0; i < n; ++i) {
//done[i] = visited[i] = false;
//}
visited[x] = true;
Q.push(cc[x]);
saw.PB(x);
for(auto nbh : V2[x]) {
verToAC[nbh.ND].PB(nbh.ST);
sawC.PB(nbh.ND);
}
vi rem = {};
while(!Q.empty()) {
x = Q.front();
Q.pop();
//cout << "COL: " << x << "\n";
if(done[x]) continue;
rem.PB(x);
done[x] = true;
for(auto y : verToAC[x]) {
if(!visited[y]) dfss(y);
}
}
for(int xx : rem) {
done[xx] = false;
}
for(int xx : saw) {
visited[xx] = false;
}
for(int xx : sawC) {
verToAC[xx].clear();
}
return saw;
}
vi find_reachable(vi r, vi u, vi v, vi c) {
n = (int)r.size();
m = (int)u.size();
for(int i = 0; i < m; ++i) {
V[c[i]][u[i]].PB(v[i]);
V[c[i]][v[i]].PB(u[i]);
V2[u[i]].emplace_back(v[i], c[i]);
V2[v[i]].emplace_back(u[i], c[i]);
}
for(int i = 0; i < n; ++i) {
cc[i] = r[i];
}
int ver = n-1;
for(int i = 0; i < n; ++i) {
for(auto it : V[i]) {
if(!vis[it.ST]) {
seen.clear();
dfs(it.ST, i);
bool any = false;
for(auto x : seen) {
if(r[x] == i) any = true;
}
if(!any) continue;
ver++;
for(auto x : seen) {
G[ver].PB(x);
Grev[x].PB(ver);
if(r[x] == i) {
G[x].PB(ver);
Grev[ver].PB(x);
}
}
}
}
for(auto it : V[i]) vis[it.ST] = false;
}
for(int i = 0; i <= ver; ++i) {
if(!vis[i]) {
dfs2(i);
}
}
for(int i = 0; i <= ver; ++i) {
vis[i] = false;
}
for(int i = ver; i >= 0; --i) {
if(!vis[topo[i]]) {
color++;
dfs3(topo[i]);
}
}
for(int i = 0; i <= ver; ++i) ok[i] = false;
for(int i = 0; i < n; ++i) ok[SCC[i]] = true;
for(int i = 0; i <= ver; ++i) {
for(int nbh : G[i]) {
if(SCC[nbh] != SCC[i]) {
ok[SCC[i]] = false;
}
}
}
vector<vi>com;
int mi = INF;
for(int i = 1; i <= color; ++i) {
if(!ok[i]) continue;
com.PB(alg(rep[i]));
//cout << rep[i] << "\n";
//for(int x : com.back()) {
//cout << x << " ";
//}
//cout << "\n";
mi = min(mi, (int)com.back().size());
}
//cout << "\n";
vector<int>ans(n);
for(int i = 0; i < n; ++i) ans[i] = false;
for(auto vc : com) {
if((int)vc.size() == mi) {
for(int x : vc) {
ans[x] = true;
}
}
}
//for(int i = 0; i < n; ++i) {
//if(ok[SCC[i]] && cnt[SCC[i]] == mi) {
//ans[i] = true;
//} else {
//ans[i] = false;
//}
//}
return ans;
}
//int main() {
//ios_base::sync_with_stdio(0);
//cin.tie(0);
//int N, M;
//cin >> N >> M;
//vi r(N), u(M), v(M), c(M);
//for(int i = 0; i < N; ++i) {
//cin >> r[i];
//}
//for(int i = 0; i < M; ++i) {
//cin >> u[i] >> v[i] >> c[i];
//}
//vi w = find_reachable(r,u,v,c);
//vi w = find_reachable({0, 1, 1, 2},{0, 0, 1, 1, 3}, {1, 2, 2, 3, 1}, {0, 0, 1, 0, 2});
//vi w = find_reachable({0, 1, 1, 2, 2, 1, 2},{0, 0, 1, 1, 2, 3, 3, 4, 4, 5},
//{1, 2, 2, 3, 3, 4, 5, 5, 6, 6},
//{0, 0, 1, 0, 0, 1, 2, 0, 2, 1});
//vi w = find_reachable({0, 0, 0}, {0}, {1}, {0});
//for(int x : w) {
//cout << x << " ";
//}
//}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
35 ms |
56728 KB |
Output is correct |
2 |
Correct |
37 ms |
56704 KB |
Output is correct |
3 |
Correct |
37 ms |
56696 KB |
Output is correct |
4 |
Correct |
36 ms |
56652 KB |
Output is correct |
5 |
Correct |
36 ms |
56652 KB |
Output is correct |
6 |
Correct |
36 ms |
56708 KB |
Output is correct |
7 |
Correct |
36 ms |
56672 KB |
Output is correct |
8 |
Correct |
39 ms |
56740 KB |
Output is correct |
9 |
Correct |
37 ms |
56652 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
35 ms |
56728 KB |
Output is correct |
2 |
Correct |
37 ms |
56704 KB |
Output is correct |
3 |
Correct |
37 ms |
56696 KB |
Output is correct |
4 |
Correct |
36 ms |
56652 KB |
Output is correct |
5 |
Correct |
36 ms |
56652 KB |
Output is correct |
6 |
Correct |
36 ms |
56708 KB |
Output is correct |
7 |
Correct |
36 ms |
56672 KB |
Output is correct |
8 |
Correct |
39 ms |
56740 KB |
Output is correct |
9 |
Correct |
37 ms |
56652 KB |
Output is correct |
10 |
Correct |
41 ms |
56788 KB |
Output is correct |
11 |
Correct |
36 ms |
56732 KB |
Output is correct |
12 |
Correct |
37 ms |
56812 KB |
Output is correct |
13 |
Correct |
35 ms |
56652 KB |
Output is correct |
14 |
Correct |
35 ms |
56620 KB |
Output is correct |
15 |
Correct |
36 ms |
56688 KB |
Output is correct |
16 |
Correct |
37 ms |
56652 KB |
Output is correct |
17 |
Correct |
35 ms |
56704 KB |
Output is correct |
18 |
Correct |
34 ms |
56756 KB |
Output is correct |
19 |
Correct |
35 ms |
56704 KB |
Output is correct |
20 |
Correct |
37 ms |
56652 KB |
Output is correct |
21 |
Correct |
36 ms |
56780 KB |
Output is correct |
22 |
Correct |
36 ms |
56656 KB |
Output is correct |
23 |
Correct |
36 ms |
56732 KB |
Output is correct |
24 |
Correct |
41 ms |
56816 KB |
Output is correct |
25 |
Correct |
36 ms |
56752 KB |
Output is correct |
26 |
Correct |
41 ms |
56724 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
35 ms |
56728 KB |
Output is correct |
2 |
Correct |
37 ms |
56704 KB |
Output is correct |
3 |
Correct |
37 ms |
56696 KB |
Output is correct |
4 |
Correct |
36 ms |
56652 KB |
Output is correct |
5 |
Correct |
36 ms |
56652 KB |
Output is correct |
6 |
Correct |
36 ms |
56708 KB |
Output is correct |
7 |
Correct |
36 ms |
56672 KB |
Output is correct |
8 |
Correct |
39 ms |
56740 KB |
Output is correct |
9 |
Correct |
37 ms |
56652 KB |
Output is correct |
10 |
Correct |
41 ms |
56788 KB |
Output is correct |
11 |
Correct |
36 ms |
56732 KB |
Output is correct |
12 |
Correct |
37 ms |
56812 KB |
Output is correct |
13 |
Correct |
35 ms |
56652 KB |
Output is correct |
14 |
Correct |
35 ms |
56620 KB |
Output is correct |
15 |
Correct |
36 ms |
56688 KB |
Output is correct |
16 |
Correct |
37 ms |
56652 KB |
Output is correct |
17 |
Correct |
35 ms |
56704 KB |
Output is correct |
18 |
Correct |
34 ms |
56756 KB |
Output is correct |
19 |
Correct |
35 ms |
56704 KB |
Output is correct |
20 |
Correct |
37 ms |
56652 KB |
Output is correct |
21 |
Correct |
36 ms |
56780 KB |
Output is correct |
22 |
Correct |
36 ms |
56656 KB |
Output is correct |
23 |
Correct |
36 ms |
56732 KB |
Output is correct |
24 |
Correct |
41 ms |
56816 KB |
Output is correct |
25 |
Correct |
36 ms |
56752 KB |
Output is correct |
26 |
Correct |
41 ms |
56724 KB |
Output is correct |
27 |
Correct |
40 ms |
57588 KB |
Output is correct |
28 |
Correct |
39 ms |
57596 KB |
Output is correct |
29 |
Correct |
40 ms |
57504 KB |
Output is correct |
30 |
Correct |
38 ms |
57184 KB |
Output is correct |
31 |
Correct |
39 ms |
57104 KB |
Output is correct |
32 |
Correct |
36 ms |
56764 KB |
Output is correct |
33 |
Correct |
38 ms |
57004 KB |
Output is correct |
34 |
Correct |
36 ms |
57032 KB |
Output is correct |
35 |
Correct |
38 ms |
57148 KB |
Output is correct |
36 |
Correct |
39 ms |
57576 KB |
Output is correct |
37 |
Correct |
39 ms |
57596 KB |
Output is correct |
38 |
Correct |
40 ms |
57692 KB |
Output is correct |
39 |
Correct |
45 ms |
57816 KB |
Output is correct |
40 |
Correct |
39 ms |
57156 KB |
Output is correct |
41 |
Correct |
44 ms |
57540 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
35 ms |
56728 KB |
Output is correct |
2 |
Correct |
37 ms |
56704 KB |
Output is correct |
3 |
Correct |
37 ms |
56696 KB |
Output is correct |
4 |
Correct |
36 ms |
56652 KB |
Output is correct |
5 |
Correct |
36 ms |
56652 KB |
Output is correct |
6 |
Correct |
36 ms |
56708 KB |
Output is correct |
7 |
Correct |
36 ms |
56672 KB |
Output is correct |
8 |
Correct |
39 ms |
56740 KB |
Output is correct |
9 |
Correct |
37 ms |
56652 KB |
Output is correct |
10 |
Correct |
1801 ms |
145012 KB |
Output is correct |
11 |
Correct |
1449 ms |
145456 KB |
Output is correct |
12 |
Correct |
417 ms |
86672 KB |
Output is correct |
13 |
Correct |
2135 ms |
180732 KB |
Output is correct |
14 |
Correct |
502 ms |
139936 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
35 ms |
56728 KB |
Output is correct |
2 |
Correct |
37 ms |
56704 KB |
Output is correct |
3 |
Correct |
37 ms |
56696 KB |
Output is correct |
4 |
Correct |
36 ms |
56652 KB |
Output is correct |
5 |
Correct |
36 ms |
56652 KB |
Output is correct |
6 |
Correct |
36 ms |
56708 KB |
Output is correct |
7 |
Correct |
36 ms |
56672 KB |
Output is correct |
8 |
Correct |
39 ms |
56740 KB |
Output is correct |
9 |
Correct |
37 ms |
56652 KB |
Output is correct |
10 |
Correct |
41 ms |
56788 KB |
Output is correct |
11 |
Correct |
36 ms |
56732 KB |
Output is correct |
12 |
Correct |
37 ms |
56812 KB |
Output is correct |
13 |
Correct |
35 ms |
56652 KB |
Output is correct |
14 |
Correct |
35 ms |
56620 KB |
Output is correct |
15 |
Correct |
36 ms |
56688 KB |
Output is correct |
16 |
Correct |
37 ms |
56652 KB |
Output is correct |
17 |
Correct |
35 ms |
56704 KB |
Output is correct |
18 |
Correct |
34 ms |
56756 KB |
Output is correct |
19 |
Correct |
35 ms |
56704 KB |
Output is correct |
20 |
Correct |
37 ms |
56652 KB |
Output is correct |
21 |
Correct |
36 ms |
56780 KB |
Output is correct |
22 |
Correct |
36 ms |
56656 KB |
Output is correct |
23 |
Correct |
36 ms |
56732 KB |
Output is correct |
24 |
Correct |
41 ms |
56816 KB |
Output is correct |
25 |
Correct |
36 ms |
56752 KB |
Output is correct |
26 |
Correct |
41 ms |
56724 KB |
Output is correct |
27 |
Correct |
40 ms |
57588 KB |
Output is correct |
28 |
Correct |
39 ms |
57596 KB |
Output is correct |
29 |
Correct |
40 ms |
57504 KB |
Output is correct |
30 |
Correct |
38 ms |
57184 KB |
Output is correct |
31 |
Correct |
39 ms |
57104 KB |
Output is correct |
32 |
Correct |
36 ms |
56764 KB |
Output is correct |
33 |
Correct |
38 ms |
57004 KB |
Output is correct |
34 |
Correct |
36 ms |
57032 KB |
Output is correct |
35 |
Correct |
38 ms |
57148 KB |
Output is correct |
36 |
Correct |
39 ms |
57576 KB |
Output is correct |
37 |
Correct |
39 ms |
57596 KB |
Output is correct |
38 |
Correct |
40 ms |
57692 KB |
Output is correct |
39 |
Correct |
45 ms |
57816 KB |
Output is correct |
40 |
Correct |
39 ms |
57156 KB |
Output is correct |
41 |
Correct |
44 ms |
57540 KB |
Output is correct |
42 |
Correct |
1801 ms |
145012 KB |
Output is correct |
43 |
Correct |
1449 ms |
145456 KB |
Output is correct |
44 |
Correct |
417 ms |
86672 KB |
Output is correct |
45 |
Correct |
2135 ms |
180732 KB |
Output is correct |
46 |
Correct |
502 ms |
139936 KB |
Output is correct |
47 |
Correct |
36 ms |
56604 KB |
Output is correct |
48 |
Correct |
37 ms |
56724 KB |
Output is correct |
49 |
Correct |
43 ms |
56688 KB |
Output is correct |
50 |
Correct |
490 ms |
157732 KB |
Output is correct |
51 |
Correct |
511 ms |
156864 KB |
Output is correct |
52 |
Correct |
820 ms |
145324 KB |
Output is correct |
53 |
Correct |
803 ms |
145328 KB |
Output is correct |
54 |
Correct |
874 ms |
145244 KB |
Output is correct |
55 |
Correct |
1255 ms |
154168 KB |
Output is correct |
56 |
Correct |
1357 ms |
168372 KB |
Output is correct |
57 |
Correct |
1450 ms |
151168 KB |
Output is correct |
58 |
Correct |
1252 ms |
203368 KB |
Output is correct |
59 |
Correct |
1366 ms |
189360 KB |
Output is correct |
60 |
Correct |
1612 ms |
181032 KB |
Output is correct |
61 |
Correct |
1845 ms |
191740 KB |
Output is correct |
62 |
Execution timed out |
2603 ms |
168140 KB |
Time limit exceeded |
63 |
Halted |
0 ms |
0 KB |
- |