QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#476322 | #997. 2-SAT 问题 | modinte# | WA | 35ms | 14780kb | C++14 | 978b | 2024-07-13 18:49:28 | 2024-07-13 18:49:28 |
Judging History
answer
#include <bits/stdc++.h>
const int N = 2e5 + 5;
int n, m, dfc, dfn[N], low[N], top, stk[N], idx, bel[N];
bool inStk[N]; std::vector<int> ver[N];
void Tarjan(int u) {
dfn[u] = low[u] = ++dfc, stk[++top] = u, inStk[u] = true;
for (int v: ver[u])
if (!dfn[v]) Tarjan(v), low[u] = std::min(low[u], low[v]);
else if (inStk[v]) low[u] = std::min(low[u], dfn[v]);
if (low[u] == dfn[u]) {
++idx; int t;
do
t = stk[top--], inStk[t] = false, bel[t] = idx;
while (t != u);
}
}
int main() {
scanf("%d%d", &n, &m);
for (int i = 1, a, b, c, d; i <= m; ++i)
scanf("%d%d%d%d", &a, &b, &c, &d),
ver[a + (b ^ 1) * n].push_back(c + d * n),
ver[c + (d ^ 1) * n].push_back(a + b * n);
for (int i = 1; i <= 2 * n; ++i) if (!dfn[i]) Tarjan(i);
for (int i = 1; i <= n; ++i)
if (bel[i] == bel[i + n]) puts("No"), exit(0);
puts("Yes");
for (int i = 1; i <= n; ++i) printf("%d ", bel[i + n] > bel[i]);
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Wrong Answer
time: 35ms
memory: 14780kb
input:
86354 86418 14615 0 14903 1 13605 0 4458 0 15604 0 77112 0 52311 1 64996 0 22711 1 74245 1 39042 1 57372 1 2994 1 84183 1 80574 0 58791 1 27780 1 9336 1 61809 0 7216 0 71113 0 42287 1 20073 0 72448 0 73840 0 77048 0 28955 0 4165 0 16322 1 14075 1 43512 0 58600 1 45219 0 53858 0 14919 0 22576 0 16594...
output:
Yes 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...
result:
wrong answer Your plan didn't satisfy condition #1.(i = 14615, a = 0, j = 14903, b = 1)