#include #include #include using namespace std; int N, M; vector typy; vector< vector > teleporty; vector prohledej(const vector start, bool muze0) { vector navstivil(N+1,false); queue Q; for (unsigned i=0; i> N >> M; typy.resize(N+1); for (int n=1; n<=N; ++n) cin >> typy[n]; teleporty.resize(N+1); while (M--) { int x, y; cin >> x >> y; teleporty[y].push_back(x); } // První prohledávání: z planet typu 0 a 1 přes cokoliv vector start1; for (int n=1; n<=N; ++n) if (typy[n]<2) start1.push_back(n); vector nebezpecne = prohledej(start1,true); // Druhé prohledávání: z bezpečných planet přes typ 1 a 2 vector start2; for (int n=1; n<=N; ++n) if (!nebezpecne[n]) start2.push_back(n); vector snesitelne = prohledej(start2,false); // Výpis výsledku cout << "bezpecne:"; for (int n=1; n<=N; ++n) if (!nebezpecne[n]) cout << " " << n; cout << endl << "snesitelne:"; for (int n=1; n<=N; ++n) if (nebezpecne[n] && snesitelne[n]) cout << " " << n; cout << endl; return 0; }