Pagini recente » Cod sursa (job #3148712) | Cod sursa (job #446856) | Cod sursa (job #1279374) | Cod sursa (job #448091) | Cod sursa (job #3240345)
#include <bits/stdc++.h>
const std :: string FILENAME = "andrei";
std :: ifstream in (FILENAME + ".in");
std :: ofstream out (FILENAME + ".out");
const int NMAX = 2e5 + 5;
int n;
int m;
int cer;
int x;
int y;
int nx;
int ny;
std :: vector <int> v[NMAX];
std :: vector <int> t[NMAX];
std :: bitset <NMAX> visited;
std :: vector <int> tout;
std :: bitset <NMAX> ans;
void dfs(int nod)
{
for(int i : v[nod])
{
if(visited[i] == false)
{
visited[i] = true;
dfs(i);
}
}
tout.push_back(nod);
}
void dfs1(int nod)
{
ans[nod] = 0;
ans[(nod > n) ? (nod - n) : (nod + n)] = 1;
for(int i : t[nod])
{
if(visited[i] == false)
{
visited[i] = true;
visited[(i > n) ? (i - n) : (i + n)] = true;
dfs1(i);
}
}
}
int main()
{
in >> n >> m;
for(int i = 1; i <= m; i ++)
{
in >> x >> y >> cer;
nx = x + n;
ny = y + n;
if(cer == 0)
{
v[nx].push_back(y);
t[y].push_back(nx);
v[ny].push_back(x);
t[x].push_back(ny);
}
else if(cer == 1)
{
v[x].push_back(ny);
t[ny].push_back(x);
v[y].push_back(nx);
t[nx].push_back(y);
}
else if(cer == 2)
{
v[x].push_back(y);
t[y].push_back(x);
v[ny].push_back(nx);
t[nx].push_back(ny);
v[nx].push_back(ny);
t[ny].push_back(nx);
v[y].push_back(x);
t[x].push_back(y);
}
}
for(int i = 1; i <= 2 * n; i ++)
{
if(visited[i] == false)
{
visited[i] = true;
dfs(i);
}
}
std :: reverse(tout.begin(), tout.end());
visited &= 0;
for(int i : tout)
{
if(visited[i] == false && visited[((i > n) ? (n - i) : (n + i))] == false)
{
visited[i] = true;
visited[(i > n) ? (n - i) : (n + i)] = true;
dfs1(i);
}
}
for(int i = 1; i <= n; i ++)
{
out << (ans[i] ^ 1) << " ";
}
return 0;
}