QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#371467 | #905. 三元环枚举 | Isrothy | RE | 0ms | 0kb | C++23 | 1.2kb | 2024-03-30 12:50:30 | 2024-03-30 12:50:30 |
Judging History
answer
#include <cstdio>
#include <span>
#include <vector>
auto three_membered_rings(std::span<std::vector<int>> adj) {
auto n = adj.size() - 1;
std::vector<size_t> rank(n + 1);
std::vector<int> vis_time(n + 1);
std::vector<std::vector<int>> f(n + 1);
for (int u = 1; u <= n; ++u) {
rank[u] = adj[u].size() * (n + 1) + u;
}
for (int u = 1; u <= n; ++u) {
for (auto v: adj[u]) {
if (rank[u] < rank[v]) {
f[u].push_back(v);
}
}
}
int res = 0;
for (int u = 1; u <= n; ++u) {
for (auto v: f[u]) {
vis_time[v] = u;
}
for (auto v: f[u]) {
for (auto w: f[v]) {
if (vis_time[w] == u) {
++res;
}
}
}
}
return res;
}
int main() {
int n, m;
scanf("%d%d", &n, &m);
std::vector<std::vector<int>> adj(n + 1);
for (int i = 0; i < m; ++i) {
int u, v;
scanf("%d%d", &u, &v);
++u;
++v;
adj[u].push_back(v);
adj[v].push_back(u);
}
printf("%d\n", three_membered_rings(adj));
return 0;
}
详细
Test #1:
score: 0
Runtime Error
input:
4 5 1 2 3 4 0 3 2 0 2 1 2 3 1 3