# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
503882 |
2022-01-09T06:18:53 Z |
CraniXort |
Pipes (CEOI15_pipes) |
C++17 |
|
967 ms |
65536 KB |
#include <bits/stdc++.h>
#define maxn 100005
#define fin std::cin
#define fout std::cout
// std::ifstream fin("pipes.in");
// std::ofstream fout("pipes.out");
std::vector <int> edge[maxn];
int disc[maxn], low[maxn], timer;
bool visited[maxn];
void dfs(int node, int parent) {
visited[node] = true;
disc[node] = low[node] = ++timer;
bool ok = false;
for(auto next: edge[node]) {
if(next == parent and ok == false) {
ok = true;
continue;
}
if(visited[next] == false) {
dfs(next, node);
low[node] = std::min(low[node], low[next]);
if(low[next] > disc[node]) {
fout << node << ' ' << next << '\n';
}
}
else{
low[node] = std::min(low[node], disc[next]);
}
}
}
class DSU {
int size;
std::vector <int> rank, parent;
public:
DSU(int size): size(size) {
rank.resize(size+1);
parent.resize(size+1);
for(int i = 1; i <= size; i ++)
parent[i] = i;
}
int findRoot(int node) {
if(parent[node] == node)
return node;
return parent[node] = findRoot(parent[node]);
}
void combine(int node1, int node2) {
node1 = findRoot(node1);
node2 = findRoot(node2);
if(node1 == node2)
return;
if(rank[node1] < rank[node2])
std::swap(node1, node2);
parent[node2] = node1;
if(rank[node1] == rank[node2])
rank[node1] ++;
}
bool sameComponent(int node1, int node2) {
node1 = findRoot(node1);
node2 = findRoot(node2);
return node1 == node2;
}
};
int main() {
std::ios_base::sync_with_stdio(false);
std::cin.tie(NULL);
std::cout.tie(NULL);
int V, E;
fin >> V >> E;
DSU first(V), second(V);
for(int i = 0, src, dest; i < E; i ++) {
fin >> src >> dest;
if(first.sameComponent(src, dest) == false) {
edge[src].push_back(dest);
edge[dest].push_back(src);
first.combine(src, dest);
}
else if(second.sameComponent(src, dest) == false) {
edge[src].push_back(dest);
edge[dest].push_back(src);
second.combine(src, dest);
}
}
for(int i = 1; i <= V; i ++)
if(visited[i] == false)
dfs(i, -1);
return 0;
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
2636 KB |
Output is correct |
2 |
Correct |
1 ms |
2636 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
4 ms |
3148 KB |
Output is correct |
2 |
Correct |
4 ms |
2892 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
82 ms |
2996 KB |
Output is correct |
2 |
Correct |
80 ms |
2876 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
140 ms |
3836 KB |
Output is correct |
2 |
Correct |
163 ms |
3432 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
221 ms |
5552 KB |
Output is correct |
2 |
Runtime error |
208 ms |
19096 KB |
Memory limit exceeded |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
299 ms |
11188 KB |
Output is correct |
2 |
Runtime error |
278 ms |
26032 KB |
Memory limit exceeded |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
462 ms |
12812 KB |
Output is correct |
2 |
Runtime error |
461 ms |
42948 KB |
Memory limit exceeded |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Runtime error |
652 ms |
58640 KB |
Memory limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Runtime error |
775 ms |
65536 KB |
Memory limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Runtime error |
967 ms |
65536 KB |
Memory limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |