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;
    }