Pagini recente » Cod sursa (job #1659423) | Cod sursa (job #45518) | Cod sursa (job #1321305) | Cod sursa (job #1050196) | Cod sursa (job #2737800)
#include <bits/stdc++.h>
#include <math.h>
using namespace std;
#define cin in
#define cout out
#define run(n) for (int i = 1; i <= n; i++)
ifstream in("felinare.in");
ofstream out("felinare.out");
const int NMAX = 9200;
vector<int> plec[NMAX], ven[NMAX];
pair<char, char> fel[NMAX];
int n, m, maxim = 1, rasp[NMAX];
int main() {
cin >> n >> m;
while (m--) {
int a, b;
cin >> a >> b;
plec[a].push_back(b);
ven[b].push_back(a);
if (plec[a].size() > plec[maxim].size())
maxim = a;
}
run (n) {
if (plec[i].empty())
fel[i].second = 1;
if (ven[i].empty())
fel[i].first = 1;
}
queue<int> coada;
for (coada.push(maxim); coada.size(); coada.pop()) {
int act = coada.front(), sosiri = 0;
for (int to : plec[act])
if (!fel[to].first)
if (ven[to].size() > sosiri)
sosiri = ven[to].size();
if (sosiri >= plec[act].size()) {
fel[act].second = 1;
sosiri = -1;
}
else {
fel[act].second = -1;
sosiri = 1;
}
for (int to : plec[act]) {
if (!fel[to].first) {
coada.push(to);
fel[to].first = sosiri;
}
}
}
maxim = 0;
run (n) {
fel[i].first = fel[i].first >= 0;
fel[i].second = fel[i].second >= 0;
maxim += fel[i].first + fel[i].second;
rasp[i] = fel[i].first * 2 + fel[i].second;
}
cout << maxim << '\n';
run(n)
cout << rasp[i] << '\n';
return 0;
}