Cod sursa(job #2312472)

Utilizator HaesteinnSabau Florin Vlad Haesteinn Data 4 ianuarie 2019 21:55:13
Problema 2SAT Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.97 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("2sat.in");
ofstream fout("2sat.out");

int n,m;

vector<int> adj[200002];
vector<int> r_adj[200002];
bool visited[200002];
bool assigned[100002];

int norm(int x)
{
    if(x<0)
        return -x+n;
    return x;
}

int neg(int x)
{
    if(x>n)
        return x-n;
    return x+n;
}

vector<int> sortat;

void dfs(int s, vector<int> *adjv, bool top)
{
    visited[s]=1;

    for(int i=0 ; i<(int)adjv[s].size() ; i++)
    {
        int v=adjv[s][i];
        if(visited[v]==0)
        {
            visited[v]=1;
            dfs(v,adjv,top);
        }
    }
    //cout<<s<<" ";
    if(top)
        sortat.push_back(s);
    return;
}


int main()
{

    fin>>n>>m;
    for(int i=0;i<m;i++)
    {
        int v1,v2;
        fin>>v1>>v2;
        v1=norm(v1),v2=norm(v2);
        adj[neg(v1)].push_back(v2), r_adj[v2].push_back(neg(v1));
        adj[neg(v2)].push_back(v1), r_adj[v1].push_back(neg(v2));
    }
    fout<<-1;
    return 0;
    int ok=0;
    dfs(1,adj,0);
    for(int i=1;i<=2*n;i++)
    {
        if(visited[i]==0)
            ok=1;
        visited[i]=0;
    }
    if(ok==0)
    {
        dfs(1,r_adj,0);
        for(int i=1;i<=2*n;i++)
        {
            if(visited[i]==0)
                ok=1;
                visited[i]=0;
        }
    }
    if(ok==0)
    {
        fout<<-1;
        return 0;
    }
    memset(visited , 0 , (2*n+1)*sizeof(bool));
    for(int i=1;i<=2*n;i++)
    {
        if(visited[i]==0)
            dfs(i,adj,1);
    }
    memset(visited, 0, (2*n+1)*sizeof(bool));
    for(int i=0;i<(int)sortat.size();i++)
    {

        int x=sortat[i];
        if(sortat[i]>n)
            x=neg(sortat[i]);
        if(visited[x]==0)
        {
            visited[x]=1;
            if(sortat[i]<=n)
                assigned[x]=1;

        }
    }
    for(int i=1;i<=n;i++)
        fout<<assigned[i]<<" ";

    return 0;
}