# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
95884 |
2019-02-03T10:16:06 Z |
Kastanda |
Pipes (CEOI15_pipes) |
C++11 |
|
2743 ms |
5868 KB |
#include<bits/stdc++.h>
using namespace std;
const int N = 100005, M = 250005;
int n, cnt, tk, H[N], Mn[N], stk[N];
int ts, head[N], nxt[M + M];
int m, from[M], to[M];
bitset < M > tree, bridge;
bitset < N > mark;
inline void Unlaze()
{
mark = 0; tree = 0;
memset(H, 0, sizeof(H));
for (int i = 1; i <= n; i++)
if (!mark[i])
{
tk = 1;
stk[tk] = i;
/* DFS */
int v, u;
while (tk)
{
v = stk[tk];
if (mark[v])
{
u = from[head[v] >> 1] ^ to[head[v] >> 1] ^ v;
Mn[v] = min(Mn[v], Mn[u]);
if (Mn[u] < H[u])
bridge[head[v] >> 1] = 0;
head[v] = nxt[head[v]];
}
if (!mark[v])
{
mark[v] = 1;
Mn[v] = H[v];
}
for (; head[v] != -1; head[v] = nxt[head[v]])
if (!tree[head[v] >> 1])
{
u = from[head[v] >> 1] ^ to[head[v] >> 1] ^ v;
if (mark[u])
Mn[v] = min(Mn[v], H[u]), bridge[head[v] >> 1] = 0;
else
{
H[u] = H[v] + 1;
tree[head[v] >> 1] = 1;
++ tk;
stk[tk] = u;
break;
}
}
if (head[v] == -1)
tk --;
}
/* DFS */
}
cnt = 0;
for (int i = 0; i < (ts >> 1); i++)
if (tree[i])
{
bool _bool;
_bool = tree[i];
tree[i] = tree[cnt];
tree[cnt] = _bool;
_bool = bridge[i];
bridge[i] = bridge[cnt];
bridge[cnt] = _bool;
swap(from[i], from[cnt]);
/*from[i] ^= from[cnt];
from[cnt] ^= from[i];
from[i] ^= from[cnt];*/
swap(to[i], to[cnt]);
/*to[i] ^= to[cnt];
to[cnt] ^= to[i];
to[i] ^= to[cnt];*/
cnt ++;
}
ts = 0;
memset(nxt, -1, sizeof(nxt));
memset(head, -1, sizeof(head));
for (int i = 0; i < cnt; i++)
{
int v, u;
v = from[i]; u = to[i];
from[ts >> 1] = v; to[ts >> 1] = u;
nxt[ts] = head[v]; head[v] = ts;
nxt[ts|1] = head[u]; head[u] = ts|1;
ts += 2;
}
}
int main()
{
memset(nxt, -1, sizeof(nxt));
memset(head, -1, sizeof(head));
scanf("%d%d", &n, &m);
for (int i = 1; i <= m; i++)
{
int v, u;
scanf("%d%d", &v, &u);
bridge[ts >> 1] = 1;
from[ts >> 1] = v; to[ts >> 1] = u;
nxt[ts] = head[v]; head[v] = ts;
nxt[ts|1] = head[u]; head[u] = ts|1;
ts += 2;
if (ts >= M + M - 20)
Unlaze();
}
Unlaze();
for (int i = 0; i < (ts >> 1); i++)
if (bridge[i])
printf("%d %d\n", from[i], to[i]);
return 0;
}
Compilation message
pipes.cpp: In function 'int main()':
pipes.cpp:100:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d", &n, &m);
~~~~~^~~~~~~~~~~~~~~~
pipes.cpp:104:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d", &v, &u);
~~~~~^~~~~~~~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
4 ms |
3072 KB |
Output is correct |
2 |
Correct |
4 ms |
3072 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
7 ms |
3200 KB |
Output is correct |
2 |
Correct |
6 ms |
3200 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
153 ms |
5132 KB |
Output is correct |
2 |
Correct |
154 ms |
5152 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
277 ms |
5156 KB |
Output is correct |
2 |
Correct |
325 ms |
5172 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
433 ms |
5180 KB |
Output is correct |
2 |
Correct |
358 ms |
5300 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
667 ms |
5608 KB |
Output is correct |
2 |
Correct |
574 ms |
5468 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1156 ms |
5676 KB |
Output is correct |
2 |
Correct |
1008 ms |
5580 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1853 ms |
5836 KB |
Output is correct |
2 |
Correct |
1696 ms |
5624 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2044 ms |
5868 KB |
Output is correct |
2 |
Correct |
2015 ms |
5568 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2743 ms |
5748 KB |
Output is correct |
2 |
Correct |
2245 ms |
5752 KB |
Output is correct |