QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#671413 | #997. 2-SAT 问题 | dieselhuang | WA | 11ms | 8824kb | C++14 | 1.2kb | 2024-10-24 12:19:12 | 2024-10-24 12:19:13 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
int n, m, tot = 0, dfx = 0, sct = 0, tp = 0, hd[200010], e[1000010][2], dfn[200010], low[200010], scc[200010], st[200010], a[200010];
bool bk[200010];
void add(int u,int v){e[++tot][0]=hd[u];e[tot][1]=v;hd[u]=tot;}
void dfs(int u){
dfn[u] = low[u] = ++dfx; st[++tp] = u; bk[u] = true;
int i, v;
for(i = hd[u]; i > 0; i = e[i][0]){
v = e[i][1];
if(dfn[v] == 0){
dfs(v);
low[u] = min(low[u], low[v]);
}else if(bk[v]) low[u] = min(low[u], dfn[v]);
}
if(low[u] >= dfn[u]){
sct++;
while(1){
v = st[tp--];
scc[v] = sct; bk[v] = false;
if(v == u) break;
}
}
}
int main()
{
int i, u, v, x, y;
scanf("%d%d", &n, &m);
for(i = 1; i <= n << 1; i++) hd[i] = 0, dfn[i] = 0, bk[i] = false;
for(i = 1; i <= m; i++){
scanf("%d%d%d%d", &u, &x, &v, &y);
add(u + (x ? n : 0), v + (y ? 0 : n));
add(v + (y ? n : 0), u + (x ? 0 : n));
}
for(i = 1; i <= n; i++){
if(dfn[u] == 0) dfs(u);
}
for(i = 1; i <= n; i++){
if(scc[i] == scc[i + n]){ printf("No"); return 0; }
a[i] = (scc[i] < scc[i + n] ? 1 : 0);
}
printf("Yes\n");
for(i = 1; i <= n; i++) printf("%d ", a[i]);
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Wrong Answer
time: 11ms
memory: 8824kb
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:
No
result:
wrong answer You didn't find a solution but jury did.