Pagini recente » Statisticile problemei Tnia | Cod sursa (job #1433715) | Cod sursa (job #2560836) | Cod sursa (job #137696) | Cod sursa (job #3193620)
#include<bits/stdc++.h>
using namespace std;
ifstream F("2sat.in");
ofstream G("2sat.out");
vector<int> u[200001],v[200001];
bitset<200001> a,b;
stack<int> s;
int d[200001],c=1,n,m,i,j,k;
void A(int i)
{
int k=u[i].size(),j;
for(a[i]=1,j=0;j<k;++j)
if(!a[u[i][j]])
A(u[i][j]);
s.push(i);
}
void B(int i)
{
int k=v[i].size(),j;
for(b[i]=1,j=0;j<k;++j)
if(!b[v[i][j]])
B(v[i][j]);
d[i]=c;
}
int main()
{
for(F>>n>>m;m--;)
if(F>>j>>k,j>0&&k>0)
u[j+n].push_back(k),v[k].push_back(j+n),u[k+n].push_back(j),v[j].push_back(k+n);
else if(j>0&&k<0)
u[j+n].push_back(n-k),v[n-k].push_back(j+n),u[-k].push_back(j),v[j].push_back(-k);
else if(j<0&&k>0)
u[-j].push_back(k),v[k].push_back(-j),u[k+n].push_back(n-j),v[n-j].push_back(k+n);
else
u[-j].push_back(n-k),v[n-k].push_back(-j),u[-k].push_back(n-j),v[n-j].push_back(-k);
for(i=1;i<=2*n;++i)
if(!a[i])
A(i);
for(;!s.empty();)
if(m=s.top(),s.pop(),!b[m])
B(m),++c;
for(i=1;i<=n;++i)
if(d[i]==d[i+n])
return G<<-1,0;
for(i=1;i<=n;G<<(d[i]>d[i+n])<<' ',++i);
return 0;
}