QOJ.ac
QOJ
QOJ is currently under a maintenance. It might be unavailable in the following a few hours.
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#881787 | #1000. 边三连通分量 | jijidawang | WA | 0ms | 12008kb | C++20 | 3.0kb | 2025-02-04 18:07:18 | 2025-02-04 18:07:19 |
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], ucol[N], dcol[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){for (auto [v, w] : T[u]){dfs3(v); ucol[u] ^= ucol[v];}}
void dfs4(int u){for (auto [v, w] : T[u]){dcol[v] ^= dcol[u]; dfs4(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);}
dfs1(1); dfs2(1); ori.insert(0);
map<u64, vector<int>> M;
for (int i=2; i<=n; i++)
{
if (ori.find(xtag[i]) != ori.end()){
u64 R = rnd(); dcol[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(); dcol[u] ^= R; dcol[v] ^= R;};
for (int i=1; i<s; i++) mark(v[i - 1], v[i]);
}
dfs3(1); dfs4(1);
map<u64, vector<int>> ans;
set<u64> qwq;
for (int i=1; i<=n; i++) ans[col[i] = ucol[i] ^ dcol[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;
}
詳細信息
Test #1:
score: 0
Wrong Answer
time: 0ms
memory: 12008kb
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]