#include <iostream> #include <vector> using namespace std; int main(){ ios::sync_with_stdio(false); cin.tie(NULL); int n, m; //n-pracownikow, m--ograniczen vector<int> t[1001][4];//t[i][0] - kogo i-ty pracownik chce za szefa, //t[i][1] - kto nie chce i-tego pracownika za szefa //t[i][2] -kto i-tego chce nad //t[i][4] - kogo i-ty nie chce pod int sumy[1001][2];//ilosc liczb w wektorze w powyzszych tablicach int a, b; char c; int nie=0, ile_zostalo; vector<int> szef;//szefowie na danym poziomie int wyniki[1000];//to co będziemy wypisywac - ktory pracownik jest szefem i-tego vector<int> wynik[1000];//kogo ma doczepiony do drzewa pracownik nad sobą cin >> n >> m; ile_zostalo=n; //do przydzielenia for(int i=0; i<=n; i++){//zerujemy tabele for(int j=0; j<2; j++){ sumy[i][j]=0; }} for(int i=0; i<m; i++){//uzupelniamy tabele cin >> a >> b >> c; if(c=='T'){ t[a][0].push_back(b); t[b][2].push_back(a); sumy[a][0]++; } else{ t[b][1].push_back(a); sumy[b][1]++; } } for(int i=1; i<=n; i++){//szukamy dyrektora if(sumy[i][0]==0 and sumy[i][1]==0){ wyniki[i]=0; szef.push_back(i); break; } else if(i==n){nie=1;} } if(nie==0){ /* for(int k=1; k<=n; k++){ for(int m=0; m<t[k][0].size(); m++){ if(t[k][0][m]==szef[0]) sumy[k][0]--; } }*/ // if(nie!=1){//jezeli odpowiedza poki co nie jest NIE // for(int i=0; i<t[ //} for(int i=1; i<=n; i++){ //cout << sumy[i][0] << '\n'; if(i!=szef[0] and (sumy[i][0]==0 )){wyniki[i]=szef[0]; for(int k=1; k<=n; k++){ for(int m=0; m<t[k][0].size(); m++){ if(t[k][0][m]==i) sumy[k][0]--; } } } } for(int i=1; i<=n; i++){ if(wyniki[i]==0 and i!=szef[0]){wyniki[i]=t[i][0].size();} } for(int i=1; i<=n; i++){ cout << wyniki[i] << '\n'; }} else{cout << "NIE" << '\n';} /* for(int i=0; i<=n; i++){ for(int j=0; j<2; j++){ cout << i << ' ' << j << ' ' << sumy[i][j] << '\n'; }}*/ return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | #include <iostream> #include <vector> using namespace std; int main(){ ios::sync_with_stdio(false); cin.tie(NULL); int n, m; //n-pracownikow, m--ograniczen vector<int> t[1001][4];//t[i][0] - kogo i-ty pracownik chce za szefa, //t[i][1] - kto nie chce i-tego pracownika za szefa //t[i][2] -kto i-tego chce nad //t[i][4] - kogo i-ty nie chce pod int sumy[1001][2];//ilosc liczb w wektorze w powyzszych tablicach int a, b; char c; int nie=0, ile_zostalo; vector<int> szef;//szefowie na danym poziomie int wyniki[1000];//to co będziemy wypisywac - ktory pracownik jest szefem i-tego vector<int> wynik[1000];//kogo ma doczepiony do drzewa pracownik nad sobą cin >> n >> m; ile_zostalo=n; //do przydzielenia for(int i=0; i<=n; i++){//zerujemy tabele for(int j=0; j<2; j++){ sumy[i][j]=0; }} for(int i=0; i<m; i++){//uzupelniamy tabele cin >> a >> b >> c; if(c=='T'){ t[a][0].push_back(b); t[b][2].push_back(a); sumy[a][0]++; } else{ t[b][1].push_back(a); sumy[b][1]++; } } for(int i=1; i<=n; i++){//szukamy dyrektora if(sumy[i][0]==0 and sumy[i][1]==0){ wyniki[i]=0; szef.push_back(i); break; } else if(i==n){nie=1;} } if(nie==0){ /* for(int k=1; k<=n; k++){ for(int m=0; m<t[k][0].size(); m++){ if(t[k][0][m]==szef[0]) sumy[k][0]--; } }*/ // if(nie!=1){//jezeli odpowiedza poki co nie jest NIE // for(int i=0; i<t[ //} for(int i=1; i<=n; i++){ //cout << sumy[i][0] << '\n'; if(i!=szef[0] and (sumy[i][0]==0 )){wyniki[i]=szef[0]; for(int k=1; k<=n; k++){ for(int m=0; m<t[k][0].size(); m++){ if(t[k][0][m]==i) sumy[k][0]--; } } } } for(int i=1; i<=n; i++){ if(wyniki[i]==0 and i!=szef[0]){wyniki[i]=t[i][0].size();} } for(int i=1; i<=n; i++){ cout << wyniki[i] << '\n'; }} else{cout << "NIE" << '\n';} /* for(int i=0; i<=n; i++){ for(int j=0; j<2; j++){ cout << i << ' ' << j << ' ' << sumy[i][j] << '\n'; }}*/ return 0; } |