This documentation is automatically generated by competitive-verifier/competitive-verifier
// competitive-verifier: PROBLEM https://yukicoder.me/problems/no/1254
#include <algorithm>
#include <iostream>
#include <vector>
#include "../../graph/others/namori-graph.hpp"
using namespace std;
int main() {
int N;
cin >> N;
NamoriGraph<int> g(N);
g.read(N);
g.build();
vector<int> ans;
for (auto& e : g.loop_edges) {
ans.emplace_back(e.idx + 1);
}
sort(begin(ans), end(ans));
cout << ans.size() << "\n";
for (int i = 0; i < static_cast<int>(ans.size()); ++i) {
if (i) cout << ' ';
cout << ans[i];
}
cout << '\n';
}
#line 1 "test/verify/yukicoder-1254.test.cpp"
// competitive-verifier: PROBLEM https://yukicoder.me/problems/no/1254
#include <algorithm>
#include <iostream>
#include <vector>
#line 2 "graph/others/namori-graph.hpp"
#line 4 "graph/others/namori-graph.hpp"
#include <queue>
#line 6 "graph/others/namori-graph.hpp"
#line 2 "graph/graph-template.hpp"
#include <cstddef>
#line 6 "graph/graph-template.hpp"
template <typename T = int>
struct Edge {
int from, to;
T cost;
int idx;
Edge() = default;
Edge(int from, int to, T cost = 1, int idx = -1)
: from(from), to(to), cost(cost), idx(idx) {}
operator int() const { return to; }
};
template <typename T = int>
struct Graph {
std::vector<std::vector<Edge<T> > > g;
int es;
Graph() = default;
explicit Graph(int n) : g(n), es(0) {}
std::size_t size() const { return g.size(); }
void add_directed_edge(int from, int to, T cost = 1) {
g[from].emplace_back(from, to, cost, es++);
}
void add_edge(int from, int to, T cost = 1) {
g[from].emplace_back(from, to, cost, es);
g[to].emplace_back(to, from, cost, es++);
}
void read(int M, int padding = -1, bool weighted = false,
bool directed = false) {
for (int i = 0; i < M; i++) {
int a, b;
std::cin >> a >> b;
a += padding;
b += padding;
T c = T(1);
if (weighted) std::cin >> c;
if (directed)
add_directed_edge(a, b, c);
else
add_edge(a, b, c);
}
}
inline std::vector<Edge<T> >& operator[](const int& k) { return g[k]; }
inline const std::vector<Edge<T> >& operator[](const int& k) const {
return g[k];
}
};
template <typename T = int>
using Edges = std::vector<Edge<T> >;
#line 8 "graph/others/namori-graph.hpp"
/**
* @brief Namori Graph
*
*/
template <typename T = int>
struct NamoriGraph : Graph<T> {
public:
using Graph<T>::Graph;
using Graph<T>::g;
std::vector<Graph<T> > forest;
Edges<T> loop_edges;
struct Info {
int tree_id, id;
};
Info operator[](const int& k) const { return (Info){mark_id[k], id[k]}; }
int inv(int tree_id, int k) { return iv[tree_id][k]; }
void build() {
int n = (int)g.size();
std::vector<int> deg(n), used(n);
std::queue<int> que;
for (int i = 0; i < n; i++) {
deg[i] = (int)g[i].size();
if (deg[i] == 1) {
que.emplace(i);
used[i] = true;
}
}
while (not que.empty()) {
int idx = que.front();
que.pop();
for (auto& e : g[idx]) {
if (used[e.to]) {
continue;
}
--deg[e.to];
if (deg[e.to] == 1) {
que.emplace(e.to);
used[e.to] = true;
}
}
}
int mx = 0;
for (auto& edges : g) {
for (auto& e : edges) mx = std::max(mx, e.idx);
}
std::vector<int> edge_used(mx + 1);
std::vector<int> loop;
for (int v = 0; v < n; v++) {
if (!used[v]) {
for (bool update = true; update;) {
update = false;
loop.emplace_back(v);
for (auto& e : g[v]) {
if (used[e.to] or edge_used[e.idx]) {
continue;
}
edge_used[e.idx] = true;
loop_edges.emplace_back(v, e.to, e.cost, e.idx);
v = e.to;
update = true;
break;
}
}
break;
}
}
loop.pop_back();
mark_id.resize(n);
id.resize(n);
for (int i = 0; i < (int)loop.size(); i++) {
int pre = loop[(i + loop.size() - 1) % loop.size()];
int nxt = loop[(i + 1) % loop.size()];
int sz = 0;
mark_id[loop[i]] = i;
iv.emplace_back();
id[loop[i]] = sz++;
iv.back().emplace_back(loop[i]);
for (auto& e : g[loop[i]]) {
if (e.to != pre and e.to != nxt) {
mark_dfs(e.to, loop[i], i, sz);
}
}
Graph<T> tree(sz);
for (auto& e : g[loop[i]]) {
if (e.to != pre and e.to != nxt) {
tree.g[id[loop[i]]].emplace_back(id[loop[i]], id[e.to], e.cost,
e.idx);
tree.g[id[e.to]].emplace_back(id[e.to], id[loop[i]], e.cost, e.idx);
build_dfs(e.to, loop[i], tree);
}
}
forest.emplace_back(tree);
}
}
private:
std::vector<std::vector<int> > iv;
std::vector<int> mark_id, id;
void mark_dfs(int idx, int par, int k, int& l) {
mark_id[idx] = k;
id[idx] = l++;
iv.back().emplace_back(idx);
for (auto& e : g[idx]) {
if (e.to != par) {
mark_dfs(e.to, idx, k, l);
}
}
}
void build_dfs(int idx, int par, Graph<T>& tree) {
for (auto& e : g[idx]) {
if (e.to != par) {
tree.g[id[idx]].emplace_back(id[idx], id[e.to], e.cost, e.idx);
tree.g[id[e.to]].emplace_back(id[e.to], id[idx], e.cost, e.idx);
build_dfs(e.to, idx, tree);
}
}
}
};
#line 8 "test/verify/yukicoder-1254.test.cpp"
using namespace std;
int main() {
int N;
cin >> N;
NamoriGraph<int> g(N);
g.read(N);
g.build();
vector<int> ans;
for (auto& e : g.loop_edges) {
ans.emplace_back(e.idx + 1);
}
sort(begin(ans), end(ans));
cout << ans.size() << "\n";
for (int i = 0; i < static_cast<int>(ans.size()); ++i) {
if (i) cout << ' ';
cout << ans[i];
}
cout << '\n';
}
| Env | Name | Status | Elapsed | Memory |
|---|---|---|---|---|
| g++ | 01_sample_01 |
|
2 ms | 4 MB |
| g++ | 01_sample_02 |
|
2 ms | 4 MB |
| g++ | 01_sample_03 |
|
2 ms | 3 MB |
| g++ | 02_Tiny_1 |
|
2 ms | 3 MB |
| g++ | 02_Tiny_10 |
|
2 ms | 4 MB |
| g++ | 02_Tiny_2 |
|
2 ms | 4 MB |
| g++ | 02_Tiny_3 |
|
2 ms | 4 MB |
| g++ | 02_Tiny_4 |
|
2 ms | 3 MB |
| g++ | 02_Tiny_5 |
|
2 ms | 4 MB |
| g++ | 02_Tiny_6 |
|
2 ms | 4 MB |
| g++ | 02_Tiny_7 |
|
2 ms | 4 MB |
| g++ | 02_Tiny_8 |
|
2 ms | 3 MB |
| g++ | 02_Tiny_9 |
|
2 ms | 4 MB |
| g++ | 03_Small1 |
|
2 ms | 4 MB |
| g++ | 03_Small10 |
|
2 ms | 4 MB |
| g++ | 03_Small11 |
|
2 ms | 4 MB |
| g++ | 03_Small12 |
|
2 ms | 4 MB |
| g++ | 03_Small13 |
|
2 ms | 4 MB |
| g++ | 03_Small14 |
|
2 ms | 4 MB |
| g++ | 03_Small15 |
|
2 ms | 3 MB |
| g++ | 03_Small2 |
|
2 ms | 4 MB |
| g++ | 03_Small3 |
|
2 ms | 4 MB |
| g++ | 03_Small4 |
|
2 ms | 4 MB |
| g++ | 03_Small5 |
|
2 ms | 4 MB |
| g++ | 03_Small6 |
|
2 ms | 3 MB |
| g++ | 03_Small7 |
|
2 ms | 4 MB |
| g++ | 03_Small8 |
|
2 ms | 4 MB |
| g++ | 03_Small9 |
|
2 ms | 4 MB |
| g++ | 03_Small_1 |
|
2 ms | 4 MB |
| g++ | 03_Small_10 |
|
2 ms | 4 MB |
| g++ | 03_Small_11 |
|
2 ms | 4 MB |
| g++ | 03_Small_12 |
|
2 ms | 3 MB |
| g++ | 03_Small_13 |
|
2 ms | 3 MB |
| g++ | 03_Small_14 |
|
2 ms | 4 MB |
| g++ | 03_Small_15 |
|
2 ms | 4 MB |
| g++ | 03_Small_2 |
|
2 ms | 4 MB |
| g++ | 03_Small_3 |
|
2 ms | 4 MB |
| g++ | 03_Small_4 |
|
2 ms | 4 MB |
| g++ | 03_Small_5 |
|
2 ms | 4 MB |
| g++ | 03_Small_6 |
|
2 ms | 4 MB |
| g++ | 03_Small_7 |
|
2 ms | 4 MB |
| g++ | 03_Small_8 |
|
2 ms | 4 MB |
| g++ | 03_Small_9 |
|
2 ms | 3 MB |
| g++ | 04_Medium_1 |
|
2 ms | 4 MB |
| g++ | 04_Medium_10 |
|
2 ms | 4 MB |
| g++ | 04_Medium_11 |
|
2 ms | 4 MB |
| g++ | 04_Medium_12 |
|
2 ms | 4 MB |
| g++ | 04_Medium_13 |
|
2 ms | 4 MB |
| g++ | 04_Medium_14 |
|
2 ms | 4 MB |
| g++ | 04_Medium_15 |
|
2 ms | 4 MB |
| g++ | 04_Medium_16 |
|
2 ms | 4 MB |
| g++ | 04_Medium_17 |
|
2 ms | 4 MB |
| g++ | 04_Medium_18 |
|
2 ms | 4 MB |
| g++ | 04_Medium_19 |
|
2 ms | 4 MB |
| g++ | 04_Medium_2 |
|
2 ms | 4 MB |
| g++ | 04_Medium_20 |
|
2 ms | 4 MB |
| g++ | 04_Medium_3 |
|
2 ms | 4 MB |
| g++ | 04_Medium_4 |
|
2 ms | 4 MB |
| g++ | 04_Medium_5 |
|
2 ms | 4 MB |
| g++ | 04_Medium_6 |
|
2 ms | 4 MB |
| g++ | 04_Medium_7 |
|
2 ms | 4 MB |
| g++ | 04_Medium_8 |
|
3 ms | 4 MB |
| g++ | 04_Medium_9 |
|
3 ms | 4 MB |
| g++ | 05_Large_1 |
|
9 ms | 6 MB |
| g++ | 05_Large_10 |
|
7 ms | 5 MB |
| g++ | 05_Large_11 |
|
4 ms | 4 MB |
| g++ | 05_Large_12 |
|
7 ms | 5 MB |
| g++ | 05_Large_13 |
|
6 ms | 4 MB |
| g++ | 05_Large_14 |
|
3 ms | 4 MB |
| g++ | 05_Large_15 |
|
5 ms | 5 MB |
| g++ | 05_Large_16 |
|
8 ms | 5 MB |
| g++ | 05_Large_17 |
|
9 ms | 5 MB |
| g++ | 05_Large_18 |
|
7 ms | 5 MB |
| g++ | 05_Large_19 |
|
9 ms | 5 MB |
| g++ | 05_Large_2 |
|
4 ms | 4 MB |
| g++ | 05_Large_20 |
|
8 ms | 5 MB |
| g++ | 05_Large_3 |
|
6 ms | 5 MB |
| g++ | 05_Large_4 |
|
5 ms | 5 MB |
| g++ | 05_Large_5 |
|
3 ms | 4 MB |
| g++ | 05_Large_6 |
|
6 ms | 5 MB |
| g++ | 05_Large_7 |
|
7 ms | 5 MB |
| g++ | 05_Large_8 |
|
4 ms | 4 MB |
| g++ | 05_Large_9 |
|
3 ms | 4 MB |
| g++ | 06_Huge_1 |
|
76 ms | 24 MB |
| g++ | 06_Huge_10 |
|
22 ms | 9 MB |
| g++ | 06_Huge_11 |
|
61 ms | 18 MB |
| g++ | 06_Huge_12 |
|
58 ms | 19 MB |
| g++ | 06_Huge_13 |
|
56 ms | 19 MB |
| g++ | 06_Huge_14 |
|
71 ms | 24 MB |
| g++ | 06_Huge_15 |
|
34 ms | 10 MB |
| g++ | 06_Huge_16 |
|
69 ms | 19 MB |
| g++ | 06_Huge_17 |
|
47 ms | 16 MB |
| g++ | 06_Huge_18 |
|
79 ms | 25 MB |
| g++ | 06_Huge_19 |
|
20 ms | 8 MB |
| g++ | 06_Huge_2 |
|
72 ms | 19 MB |
| g++ | 06_Huge_20 |
|
11 ms | 6 MB |
| g++ | 06_Huge_21 |
|
21 ms | 8 MB |
| g++ | 06_Huge_22 |
|
29 ms | 11 MB |
| g++ | 06_Huge_23 |
|
60 ms | 18 MB |
| g++ | 06_Huge_24 |
|
37 ms | 13 MB |
| g++ | 06_Huge_25 |
|
78 ms | 26 MB |
| g++ | 06_Huge_26 |
|
76 ms | 21 MB |
| g++ | 06_Huge_27 |
|
61 ms | 18 MB |
| g++ | 06_Huge_28 |
|
55 ms | 17 MB |
| g++ | 06_Huge_29 |
|
59 ms | 17 MB |
| g++ | 06_Huge_3 |
|
48 ms | 15 MB |
| g++ | 06_Huge_30 |
|
28 ms | 10 MB |
| g++ | 06_Huge_31 |
|
54 ms | 18 MB |
| g++ | 06_Huge_32 |
|
37 ms | 13 MB |
| g++ | 06_Huge_33 |
|
14 ms | 6 MB |
| g++ | 06_Huge_34 |
|
42 ms | 15 MB |
| g++ | 06_Huge_35 |
|
28 ms | 10 MB |
| g++ | 06_Huge_36 |
|
77 ms | 21 MB |
| g++ | 06_Huge_37 |
|
47 ms | 15 MB |
| g++ | 06_Huge_38 |
|
74 ms | 22 MB |
| g++ | 06_Huge_39 |
|
25 ms | 9 MB |
| g++ | 06_Huge_4 |
|
65 ms | 20 MB |
| g++ | 06_Huge_40 |
|
41 ms | 14 MB |
| g++ | 06_Huge_5 |
|
72 ms | 20 MB |
| g++ | 06_Huge_6 |
|
13 ms | 7 MB |
| g++ | 06_Huge_7 |
|
74 ms | 21 MB |
| g++ | 06_Huge_8 |
|
49 ms | 14 MB |
| g++ | 06_Huge_9 |
|
40 ms | 12 MB |
| g++ | 07_Cycle_01 |
|
2 ms | 4 MB |
| g++ | 07_Cycle_02 |
|
91 ms | 27 MB |
| g++ | 07_Cycle_03 |
|
89 ms | 27 MB |
| clang++ | 01_sample_01 |
|
2 ms | 4 MB |
| clang++ | 01_sample_02 |
|
2 ms | 4 MB |
| clang++ | 01_sample_03 |
|
2 ms | 4 MB |
| clang++ | 02_Tiny_1 |
|
2 ms | 4 MB |
| clang++ | 02_Tiny_10 |
|
2 ms | 4 MB |
| clang++ | 02_Tiny_2 |
|
2 ms | 4 MB |
| clang++ | 02_Tiny_3 |
|
2 ms | 4 MB |
| clang++ | 02_Tiny_4 |
|
2 ms | 4 MB |
| clang++ | 02_Tiny_5 |
|
2 ms | 4 MB |
| clang++ | 02_Tiny_6 |
|
2 ms | 4 MB |
| clang++ | 02_Tiny_7 |
|
2 ms | 4 MB |
| clang++ | 02_Tiny_8 |
|
2 ms | 4 MB |
| clang++ | 02_Tiny_9 |
|
2 ms | 4 MB |
| clang++ | 03_Small1 |
|
2 ms | 4 MB |
| clang++ | 03_Small10 |
|
2 ms | 4 MB |
| clang++ | 03_Small11 |
|
2 ms | 4 MB |
| clang++ | 03_Small12 |
|
2 ms | 4 MB |
| clang++ | 03_Small13 |
|
2 ms | 4 MB |
| clang++ | 03_Small14 |
|
2 ms | 4 MB |
| clang++ | 03_Small15 |
|
2 ms | 4 MB |
| clang++ | 03_Small2 |
|
2 ms | 4 MB |
| clang++ | 03_Small3 |
|
2 ms | 4 MB |
| clang++ | 03_Small4 |
|
2 ms | 4 MB |
| clang++ | 03_Small5 |
|
2 ms | 4 MB |
| clang++ | 03_Small6 |
|
2 ms | 4 MB |
| clang++ | 03_Small7 |
|
2 ms | 4 MB |
| clang++ | 03_Small8 |
|
2 ms | 4 MB |
| clang++ | 03_Small9 |
|
2 ms | 4 MB |
| clang++ | 03_Small_1 |
|
2 ms | 4 MB |
| clang++ | 03_Small_10 |
|
2 ms | 4 MB |
| clang++ | 03_Small_11 |
|
2 ms | 4 MB |
| clang++ | 03_Small_12 |
|
2 ms | 4 MB |
| clang++ | 03_Small_13 |
|
2 ms | 4 MB |
| clang++ | 03_Small_14 |
|
2 ms | 4 MB |
| clang++ | 03_Small_15 |
|
2 ms | 4 MB |
| clang++ | 03_Small_2 |
|
2 ms | 4 MB |
| clang++ | 03_Small_3 |
|
2 ms | 4 MB |
| clang++ | 03_Small_4 |
|
2 ms | 4 MB |
| clang++ | 03_Small_5 |
|
2 ms | 4 MB |
| clang++ | 03_Small_6 |
|
2 ms | 4 MB |
| clang++ | 03_Small_7 |
|
2 ms | 4 MB |
| clang++ | 03_Small_8 |
|
2 ms | 4 MB |
| clang++ | 03_Small_9 |
|
2 ms | 4 MB |
| clang++ | 04_Medium_1 |
|
2 ms | 4 MB |
| clang++ | 04_Medium_10 |
|
3 ms | 4 MB |
| clang++ | 04_Medium_11 |
|
2 ms | 4 MB |
| clang++ | 04_Medium_12 |
|
2 ms | 4 MB |
| clang++ | 04_Medium_13 |
|
2 ms | 4 MB |
| clang++ | 04_Medium_14 |
|
2 ms | 4 MB |
| clang++ | 04_Medium_15 |
|
2 ms | 4 MB |
| clang++ | 04_Medium_16 |
|
2 ms | 4 MB |
| clang++ | 04_Medium_17 |
|
2 ms | 4 MB |
| clang++ | 04_Medium_18 |
|
2 ms | 4 MB |
| clang++ | 04_Medium_19 |
|
2 ms | 4 MB |
| clang++ | 04_Medium_2 |
|
2 ms | 4 MB |
| clang++ | 04_Medium_20 |
|
2 ms | 4 MB |
| clang++ | 04_Medium_3 |
|
2 ms | 4 MB |
| clang++ | 04_Medium_4 |
|
2 ms | 4 MB |
| clang++ | 04_Medium_5 |
|
2 ms | 4 MB |
| clang++ | 04_Medium_6 |
|
2 ms | 4 MB |
| clang++ | 04_Medium_7 |
|
2 ms | 4 MB |
| clang++ | 04_Medium_8 |
|
2 ms | 4 MB |
| clang++ | 04_Medium_9 |
|
2 ms | 4 MB |
| clang++ | 05_Large_1 |
|
9 ms | 6 MB |
| clang++ | 05_Large_10 |
|
7 ms | 5 MB |
| clang++ | 05_Large_11 |
|
4 ms | 4 MB |
| clang++ | 05_Large_12 |
|
7 ms | 5 MB |
| clang++ | 05_Large_13 |
|
6 ms | 4 MB |
| clang++ | 05_Large_14 |
|
3 ms | 4 MB |
| clang++ | 05_Large_15 |
|
5 ms | 4 MB |
| clang++ | 05_Large_16 |
|
8 ms | 5 MB |
| clang++ | 05_Large_17 |
|
9 ms | 5 MB |
| clang++ | 05_Large_18 |
|
7 ms | 5 MB |
| clang++ | 05_Large_19 |
|
9 ms | 5 MB |
| clang++ | 05_Large_2 |
|
4 ms | 4 MB |
| clang++ | 05_Large_20 |
|
8 ms | 5 MB |
| clang++ | 05_Large_3 |
|
6 ms | 5 MB |
| clang++ | 05_Large_4 |
|
5 ms | 5 MB |
| clang++ | 05_Large_5 |
|
3 ms | 4 MB |
| clang++ | 05_Large_6 |
|
6 ms | 5 MB |
| clang++ | 05_Large_7 |
|
7 ms | 5 MB |
| clang++ | 05_Large_8 |
|
4 ms | 4 MB |
| clang++ | 05_Large_9 |
|
3 ms | 4 MB |
| clang++ | 06_Huge_1 |
|
76 ms | 24 MB |
| clang++ | 06_Huge_10 |
|
23 ms | 9 MB |
| clang++ | 06_Huge_11 |
|
61 ms | 18 MB |
| clang++ | 06_Huge_12 |
|
56 ms | 19 MB |
| clang++ | 06_Huge_13 |
|
55 ms | 19 MB |
| clang++ | 06_Huge_14 |
|
71 ms | 24 MB |
| clang++ | 06_Huge_15 |
|
33 ms | 10 MB |
| clang++ | 06_Huge_16 |
|
69 ms | 19 MB |
| clang++ | 06_Huge_17 |
|
46 ms | 16 MB |
| clang++ | 06_Huge_18 |
|
82 ms | 25 MB |
| clang++ | 06_Huge_19 |
|
20 ms | 8 MB |
| clang++ | 06_Huge_2 |
|
71 ms | 19 MB |
| clang++ | 06_Huge_20 |
|
11 ms | 6 MB |
| clang++ | 06_Huge_21 |
|
21 ms | 8 MB |
| clang++ | 06_Huge_22 |
|
29 ms | 11 MB |
| clang++ | 06_Huge_23 |
|
61 ms | 18 MB |
| clang++ | 06_Huge_24 |
|
37 ms | 13 MB |
| clang++ | 06_Huge_25 |
|
76 ms | 26 MB |
| clang++ | 06_Huge_26 |
|
75 ms | 21 MB |
| clang++ | 06_Huge_27 |
|
61 ms | 18 MB |
| clang++ | 06_Huge_28 |
|
56 ms | 17 MB |
| clang++ | 06_Huge_29 |
|
59 ms | 17 MB |
| clang++ | 06_Huge_3 |
|
47 ms | 15 MB |
| clang++ | 06_Huge_30 |
|
28 ms | 10 MB |
| clang++ | 06_Huge_31 |
|
55 ms | 18 MB |
| clang++ | 06_Huge_32 |
|
36 ms | 13 MB |
| clang++ | 06_Huge_33 |
|
14 ms | 6 MB |
| clang++ | 06_Huge_34 |
|
41 ms | 15 MB |
| clang++ | 06_Huge_35 |
|
27 ms | 10 MB |
| clang++ | 06_Huge_36 |
|
69 ms | 22 MB |
| clang++ | 06_Huge_37 |
|
45 ms | 16 MB |
| clang++ | 06_Huge_38 |
|
71 ms | 22 MB |
| clang++ | 06_Huge_39 |
|
25 ms | 9 MB |
| clang++ | 06_Huge_4 |
|
65 ms | 20 MB |
| clang++ | 06_Huge_40 |
|
43 ms | 14 MB |
| clang++ | 06_Huge_5 |
|
71 ms | 20 MB |
| clang++ | 06_Huge_6 |
|
13 ms | 7 MB |
| clang++ | 06_Huge_7 |
|
73 ms | 21 MB |
| clang++ | 06_Huge_8 |
|
49 ms | 14 MB |
| clang++ | 06_Huge_9 |
|
40 ms | 13 MB |
| clang++ | 07_Cycle_01 |
|
2 ms | 4 MB |
| clang++ | 07_Cycle_02 |
|
93 ms | 27 MB |
| clang++ | 07_Cycle_03 |
|
96 ms | 27 MB |