QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#881787#1000. 边三连通分量jijidawangWA 0ms12008kbC++203.0kb2025-02-04 18:07:182025-02-04 18:07:19

Judging History

This is the latest submission verdict.

  • [2025-02-04 18:07:19]
  • Judged
  • Verdict: WA
  • Time: 0ms
  • Memory: 12008kb
  • [2025-02-04 18:07:18]
  • Submitted

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]