# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
518402 |
2022-01-23T16:10:03 Z |
blue |
Pipes (CEOI15_pipes) |
C++17 |
|
651 ms |
16580 KB |
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int mx = 90'000;
using vi = vector<int>;
struct disjoint_set
{
public:
vi parent = vi(1+mx);
vi subtree = vi(1+mx, 1);
disjoint_set()
{
for(int i = 1; i <= mx; i++) parent[i] = i;
}
int root(int u)
{
if(parent[u] == u) return u;
else return (parent[u] = root(parent[u]));
}
bool join(int u, int v)
{
u = root(u);
v = root(v);
if(u == v) return 0;
if(subtree[u] < subtree[v]) swap(u, v);
parent[v] = u;
subtree[u] += subtree[v];
return 1;
}
};
vi edge[1+mx];
void add_edge(int u, int v)
{
edge[u].push_back(v);
edge[v].push_back(u);
// cerr << "adding edge " << u << ' ' << v << '\n';
}
vi rev_edge[1+mx];
vi visit(1+mx, 0);
vi ee;
void dfs(int u, int p)
{
// cerr << "dfs enter " << u << '\n';
visit[u] = 1;
int cont = 0;
for(int v: edge[u])
{
if(cont == 0 && v == p)
{
cont++;
continue;
}
if(visit[v])
{
rev_edge[v].push_back(u);
}
else
{
rev_edge[v].push_back(u);
dfs(v, u);
}
}
edge[u].clear();
ee.push_back(u);
// cerr << "dfs exit " << u << '\n';
}
int ct = 0;
void dfs2(int u)
{
visit[u] = ct;
for(int v: rev_edge[u])
{
if(visit[v]) continue;
dfs2(v);
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int N, M;
cin >> N >> M;
disjoint_set A;
disjoint_set B;
for(int e = 1; e <= M; e++)
{
int u, v;
cin >> u >> v;
if(A.join(u, v)) add_edge(u, v);
else if(B.join(u, v)) add_edge(u, v);
}
A.parent.clear();
A.subtree.clear();
B.parent.clear();
B.subtree.clear();
for(int u = 1; u <= N; u++)
{
if(visit[u]) continue;
dfs(u, 0);
}
reverse(ee.begin(), ee.end());
visit = vi(1+N, 0);
for(int u: ee)
{
// cerr << "u = " << u << '\n';
if(visit[u]) continue;
ct++;
dfs2(u);
}
// for(int i = 1; i <= N; i++) cerr << bcc[i] << ' ';
// cerr << '\n';
for(int u = 1; u <= N; u++)
for(int v: rev_edge[u])
if(visit[u] != visit[v])
cout << u << ' ' << v << '\n';
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
3 ms |
6220 KB |
Output is correct |
2 |
Correct |
3 ms |
6220 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
9 ms |
6860 KB |
Output is correct |
2 |
Correct |
7 ms |
6604 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
85 ms |
6704 KB |
Output is correct |
2 |
Correct |
84 ms |
6576 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
144 ms |
7456 KB |
Output is correct |
2 |
Correct |
185 ms |
7056 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
252 ms |
9304 KB |
Output is correct |
2 |
Correct |
210 ms |
9284 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
344 ms |
15212 KB |
Output is correct |
2 |
Correct |
340 ms |
12184 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Runtime error |
651 ms |
16580 KB |
Memory limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Runtime error |
9 ms |
12492 KB |
Execution killed with signal 11 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Runtime error |
10 ms |
12612 KB |
Execution killed with signal 11 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Runtime error |
8 ms |
12620 KB |
Execution killed with signal 11 |
2 |
Halted |
0 ms |
0 KB |
- |