Pagini recente » Cod sursa (job #2862629) | Cod sursa (job #1147134) | Cod sursa (job #1629721) | Cod sursa (job #826830) | Cod sursa (job #663692)
Cod sursa(job #663692)
#include<fstream>
#include<vector>
#define NMAx 200100
#define non(x) x<=n?x+n:x-n
using namespace std;
vector <int> G[NMAx],Gt[NMAx];
int n,nr,ans=1,deque[NMAx],sol[NMAx];
bool viz[NMAx];
void dfs(int nod) {
int i;
viz[nod]=0;
if(sol[nod]) {
ans=0;
return;
}
sol[non(nod)]=1;
for(i=0;i<Gt[nod].size();i++)
if(viz[Gt[nod][i]])
dfs(Gt[nod][i]);
}
void sort_top(int nod) {
int i,vec;
viz[nod]=1;
for(i=0;i<G[nod].size();i++)
if(!viz[G[nod][i]]) {
vec=G[nod][i];
sort_top(vec);
}
deque[nr--]=nod;
}
void citire() {
int i,x,y,m;
ifstream in("2sat.in");
in>>n>>m;
for(i=0;i<m;i++) {
in>>x>>y;
if(x<0) x=n-x;
if(y<0) y=n-y;
G[non(x)].push_back(y);
G[non(y)].push_back(x);
Gt[x].push_back(non(y));
Gt[y].push_back(non(x));
}
in.close();
}
void afis(int ans) {
int i;
ofstream out("2sat.out");
if(ans)
for(i=1;i<=n;i++)
out<<sol[i]<<" ";
else
out<<"-1";
out<<'\n';
}
int main() {
int i;
citire();
for(i=1,nr=2*n;i<=2*n;i++)
if(!viz[i])
sort_top(i);
for(i=1;i<=2*n&&ans;i++)
if(viz[deque[i]]&&viz[non(deque[i])])
dfs(deque[i]);
afis(ans);
return 0;
}