Pagini recente » Cod sursa (job #2526550) | Cod sursa (job #303182) | Cod sursa (job #525598) | Cod sursa (job #1986059) | Cod sursa (job #2909046)
#include <fstream>
#include <vector>
#include <stack>
using namespace std;
ifstream fin("andrei.in");
ofstream fout("andrei.out");
int n, m, x, y, z, v[200005], cnt, ctc[200005];
vector<int> G[200005], GT[200005];
stack<int> st;
void adaugare(int a, int b) {
G[a].push_back(b);
GT[b].push_back(a);
}
void dfs(int nod) {
v[nod] = 1;
for(auto i : G[nod]) {
if(v[i] == 0) {
dfs(i);
}
}
st.push(nod);
}
void dfsT(int nod) {
v[nod] = 2;
ctc[nod] = cnt;
for(auto i : GT[nod]) {
if(v[i] == 1) {
dfsT(i);
}
}
}
void kosaraju() {
for(int i = 1; i <= 2 * n; i++) {
if(v[i] == 0) {
dfs(i);
}
}
while(!st.empty()) {
int nod = st.top();
if(v[nod] == 1) {
cnt++;
dfsT(nod);
}
st.pop();
}
}
int main() {
fin >> n >> m;
for(; m; m--) {
fin >> x >> y >> z;
if(z == 0) {
adaugare(x, y + n);
adaugare(y, x + n);
} else if(z == 1) {
adaugare(x + n, y);
adaugare(y + n, x);
} else if(z == 2) {
adaugare(x, y); adaugare(y, x);
adaugare(x + n, y + n); adaugare(y + n, x + n);
}
}
fin.close();
kosaraju();
for(int i = 1; i <= n; i++) {
fout << (ctc[i] < ctc[i + n]) << " ";
}
return 0;
}