# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
711639 |
2023-03-17T10:25:54 Z |
Pety |
Pipes (CEOI15_pipes) |
C++14 |
|
2191 ms |
46392 KB |
#include <bits/stdc++.h>
using namespace std;
int n, m, x, y, sz[100002], p[100002], dp[20][100002], depth[100002];
vector<vector<int>>v[100002];
vector<int>G[100002];
int find (int x) {
if (p[x] == x)
return x;
return p[x] = find(p[x]);
}
void merge (int x, int y) {
int px = find(x);
int py = find(y);
if (px == py)
return;
if (sz[px] > sz[py]) {
swap(x, y);
swap(px, py);
}
p[px] = py;
sz[py] += sz[px];
for (int i = y; i; i = dp[0][i]) {
for (int j = 0; (1 << j) < n; j++) {
int lvl = (1 << j) - 1 - (depth[y] - depth[i]);
if (lvl >= 0 && lvl < v[x].size())
for (auto it : v[x][lvl])
dp[j][it] = i;
}
}
for (int i = 0; i < v[px].size(); i++) {
while (depth[y] + i + 1 >= v[py].size())
v[py].push_back({});
for (auto it : v[px][i]) {
v[py][depth[y] + i + 1].push_back(it);
depth[it]+=depth[y] + 1;
}
}
}
int lca (int x, int y) {
if (depth[x] > depth[y])
swap(x, y);
int d = depth[y] - depth[x];
for (int i = 0; (1 << i) <= d; i++)
if (d & (1 << i))
y = dp[i][y];
if (x == y)
return x;
for (int i = 19; i >= 0; i--)
if (dp[i][x] != dp[i][y]) {
x = dp[i][x];
y = dp[i][y];
}
return dp[0][x];
}
int add[100002], viz[100002];
void dfs (int x, int par) {
//cout << x << "\n";
viz[x] = 1;
for (auto it : G[x]) {
if (it == par)
continue;
dfs(it, x);
add[x] += add[it];
}
if (add[x] == 0 && par != 0)
cout << x << " " << par << "\n";
}
int main ()
{
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin >> n >> m;
for (int i = 1; i <= n; i++) {
p[i] = i;
sz[i] = 1;
v[i].push_back({i});
}
for (int i = 1; i <= m; i++) {
cin >> x >> y;
if (find(x) == find(y)) {
int L = lca(x, y);
add[L] -= 2;
add[x]++;
add[y]++;
}
else {
G[x].push_back(y);
G[y].push_back(x);
merge(x, y);
}
}
for (int i = 1; i <= n; i++)
if (!viz[find(i)])
dfs(find(i), 0);
return 0;
}
Compilation message
pipes.cpp: In function 'void merge(int, int)':
pipes.cpp:30:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
30 | if (lvl >= 0 && lvl < v[x].size())
| ~~~~^~~~~~~~~~~~~
pipes.cpp:35:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
35 | for (int i = 0; i < v[px].size(); i++) {
| ~~^~~~~~~~~~~~~~
pipes.cpp:36:29: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
36 | while (depth[y] + i + 1 >= v[py].size())
| ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
3 ms |
5076 KB |
Output is correct |
2 |
Incorrect |
2 ms |
5076 KB |
Wrong number of edges |
3 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
7 ms |
5844 KB |
Output is correct |
2 |
Incorrect |
7 ms |
5844 KB |
Wrong number of edges |
3 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
138 ms |
5664 KB |
Output is correct |
2 |
Incorrect |
150 ms |
5760 KB |
Wrong number of edges |
3 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
235 ms |
6672 KB |
Output is correct |
2 |
Incorrect |
293 ms |
6860 KB |
Wrong number of edges |
3 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
462 ms |
9124 KB |
Output is correct |
2 |
Runtime error |
412 ms |
24492 KB |
Memory limit exceeded |
3 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Runtime error |
705 ms |
17120 KB |
Memory limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Runtime error |
1129 ms |
18968 KB |
Memory limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Runtime error |
1630 ms |
23112 KB |
Memory limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Runtime error |
2033 ms |
34664 KB |
Memory limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Runtime error |
2191 ms |
46392 KB |
Memory limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |