Pagini recente » Cod sursa (job #635420) | Borderou de evaluare (job #1750609) | Borderou de evaluare (job #1400516) | Borderou de evaluare (job #1707980) | Cod sursa (job #2604873)
#include <bits/stdc++.h>
using namespace std;
ifstream f("felinare.in");
ofstream g("felinare.out");
const int NMAX = 9005;
int n,m;
vector < int > vo[NMAX],vi[NMAX];
pair < int, int > ao[NMAX], ai[NMAX];
int vizo[NMAX], vizi[NMAX];
int anso[NMAX], ansi[NMAX];
int ans;
int main(){
int i,j,x,y;
f >> n >> m;
for(i = 1 ; i <= m ; i++){
f >> x >> y;
vo[x].push_back(y);
vi[y].push_back(x);
}
for(i = 1 ; i <= n ; i++){
ao[i].first = vo[i].size();
ai[i].first = vi[i].size();
ao[i].second = ai[i].second = i;
}
sort(ao + 1, ao + n + 1);
sort(ai + 1, ai + n + 1);
i = j = 1;
while(i <= n && ao[i].first == 0){
ans++;
vizo[ao[i].second] = 1;
anso[ao[i].second] = 1;
i++;
}
while(j <= n && ai[j].first == 0){
ans++;
vizi[ai[j].second] = 1;
ansi[ai[j].second] = 1;
j++;
}
while(i <= n && j <= n){
while(i <= n && vizo[ao[i].second] )
i++;
while(j <= n && vizi[ai[j].second] )
j++;
if(i <= n && j <= n){
if(ao[i].first <= ai[j].first){
ans++;
for(auto it: vo[ao[i].second])
vizi[it] = 1;
vizo[ao[i].second] = 1;
anso[ao[i].second] = 1;
}else{
ans++;
for(auto it: vi[ai[i].second])
vizo[it] = 1;
vizi[ai[j].second] = 1;
ansi[ai[j].second] = 1;
}
}else
if(i <= n){
ans++;
vizo[ao[i].second] = 1;
anso[ao[i].second] = 1;
}else
if(j <= n){
ans++;
vizi[ai[j].second] = 1;
ansi[ai[j].second] = 1;
}
}
g << ans << "\n";
for(i = 1 ; i <= n ; i++)
if(ansi[i] && anso[i])
g << 3 << "\n";
else
if(ansi[i])
g << 2 << "\n";
else
if(anso[i])
g << 1 << "\n";
else
g << 0 << "\n";
return 0;
}