QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#881833 | #1000. 边三连通分量 | jijidawang | WA | 1ms | 12256kb | C++20 | 3.0kb | 2025-02-04 18:46:26 | 2025-02-04 18:46:28 |
Judging History
answer
#include <bits/stdc++.h>
namespace // my guiding star
{
#define filein(x) freopen(x".in", "r", stdin);
#define fileout(x) freopen(x, "w", stdout);
#define file(x) freopen(x".in", "r", stdin), freopen(x".out", "w", stdout);
#define files(x) freopen(x".in", "r", stdin), freopen(x".ans", "w", stdout);
using namespace std;
#define cT const T&
template<typename T>
inline T chkmin(T& x, cT y){if (x > y) x = y; return x;}
template<typename T>
inline T chkmax(T& x, cT y){if (x < y) x = y; return x;}
template <typename T>
inline bool inrange(cT x, cT l, cT r){return (l <= x) && (x <= r);}
template <typename T>
inline bool inrange(cT l, cT r, cT L, cT R){return (L <= l) && (r <= R);}
#undef cT
typedef long long ll;
typedef unsigned long long u64;
typedef double db;
typedef long double ldb;
typedef unsigned u32;
template <typename T>
using pr = pair<T, T>;
typedef pr<int> pii;
typedef pr<ll> pll;
typedef pr<db> pdd;
typedef complex<double> cp;
typedef vector<int> vi;
inline void YN(bool x){puts((x) ? "Yes" : "No");}
}
const int N = 5e5 + 233;
mt19937_64 rnd(1);
struct SimpleGraph
{
vector<pii> g[N];
inline void addedge(int u, int v, int w){g[u].emplace_back(v, w);}
inline void ade(int u, int v, int w){addedge(u, v, w); addedge(v, u, w);}
vector<pii> operator[](const int& id) const {return g[id];}
vector<pii>& operator[](const int& id){return g[id];}
}G, T;
int n, m, fa[N], dep[N], dfn[N], cc;
u64 xtag[N], col[N];
bool vis[N], vise[N];
set<u64> ori;
pii reduce(pii a){return {min(a.first, a.second), max(a.first, a.second)};}
void dfs1(int u)
{
vis[u] = true; dfn[u] = ++cc;
for (auto [v, i] : G[u])
{
if (vis[v])
{
if (vise[i]) continue;
u64 R = rnd(); ori.insert(R); xtag[u] ^= R; xtag[v] ^= R; vise[i] = true;
}
else{dep[v] = dep[u] + 1; vise[i] = true; dfs1(v); fa[v] = u; T.addedge(u, v, 0);}
}
}
void dfs2(int u){for (auto [v, w] : T[u]){dfs2(v); xtag[u] ^= xtag[v];}}
void dfs3(int u){vis[u] = true; for (auto [v, w] : T[u]){col[v] ^= col[u]; dfs3(v);}}
int main()
{
scanf("%d%d", &n, &m);
for (int i=1, u, v; i<=m; i++){scanf("%d%d", &u, &v); G.ade(u, v, i);}
for (int i=1; i<=n; i++)
if (!vis[i]){dfs1(i); dfs2(i);}
ori.insert(0);
map<u64, vector<int>> M;
for (int i=2; i<=n; i++)
{
if (ori.find(xtag[i]) != ori.end()) col[i] ^= rnd();
else M[xtag[i]].emplace_back(i);
}
for (auto& [u, v] : M)
{
stable_sort(v.begin(), v.end(), [&](int u, int v){return dfn[u] < dfn[v];});
int s = v.size();
auto mark = [&](int u, int v){u64 R = rnd(); col[u] ^= R; col[v] ^= R;};
for (int i=1; i<s; i++) mark(v[i - 1], v[i]);
}
memset(vis, 0, sizeof vis);
for (int i=1; i<=n; i++)
if (!vis[i]) dfs3(i);
map<u64, vector<int>> ans;
set<u64> qwq;
for (int i=1; i<=n; i++) ans[col[i]].emplace_back(i);
printf("%ld\n", ans.size());
for (int i=1; i<=n; i++)
{
if (qwq.find(col[i]) != qwq.end()) continue;
qwq.insert(col[i]);
for (auto x : ans[col[i]]) printf("%d ", x);
puts("");
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Wrong Answer
time: 1ms
memory: 12256kb
input:
4 5 0 2 0 1 3 0 2 1 2 3
output:
3 1 2 3 4
result:
wrong answer Integer 4 violates the range [0, 3]