이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <iostream>
#include <vector>
#include <stack>
#include <cassert>
using namespace std;
struct disjoint_set
{
int N;
vector<int> parent;
vector<int> parent_edge;
vector<int> subtree;
stack<int> ops;
stack<bool> bipartite;
disjoint_set()
{
;
}
disjoint_set(int N_)
{
N = N_;
parent = vector<int>(1+N);
parent_edge = vector<int>(1+N);
subtree = vector<int>(1+N);
for(int i = 0; i <= N; i++)
{
parent[i] = i;
parent_edge[i] = 0;
subtree[i] = 1;
}
ops.push(0);
bipartite.push(1);
}
void join(int u, int v)
{
int opp = 1;
while(u != parent[u])
{
opp ^= parent_edge[u];
u = parent[u];
}
while(v != parent[v])
{
opp ^= parent_edge[v];
v = parent[v];
}
if(u == v)
{
ops.push(0);
if(bipartite.top())
{
if(opp == 0) bipartite.push(1);
else bipartite.push(0);
}
else bipartite.push(0);
}
else
{
if(subtree[u] < subtree[v]) swap(u, v);
parent[v] = u;
parent_edge[v] = opp;
subtree[u] += subtree[v];
ops.push(v);
bipartite.push( bipartite.top() );
}
}
void rollback()
{
int u = ops.top();
ops.pop();
bipartite.pop();
subtree[ parent[u] ] -= subtree[u];
parent[u] = u;
parent_edge[u] = 0;
}
bool is_bipartite()
{
return bipartite.top();
}
};
const int maxN = 200'000;
const int maxM = 200'000;
int N, M, Q;
vector<int> u(1+maxM), v(1+maxM);
int main()
{
cin >> N >> M >> Q;
for(int j = 1; j <= M; j++) cin >> u[j] >> v[j];
for(int q = 1; q <= Q; q++)
{
disjoint_set DSU(N);
int l, r;
cin >> l >> r;
for(int i = 1; i <= M; i++)
{
if(i < l || r < i)
DSU.join(u[i], v[i]);
}
if(DSU.is_bipartite()) cout << "NO\n";
else cout << "YES\n";
}
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |