Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- USER: pdp23u8
- NAME: Loukas Xanthos
- LANG: C++
- TASK: company
- COMMENTS: pdp23 part 2 (High School)
- */
- #include <iostream>
- #include <fstream>
- #include <vector>
- using namespace std;
- #define MAX_N 400002
- #define F false
- #define M true
- typedef unsigned long int uint;
- uint N, boss;
- long int diff;
- vector<uint> graph[MAX_N];
- vector<bool> sex(MAX_N);
- void DFS(uint node, uint females, uint males)
- {
- if(sex[node] == F) {
- diff += males;
- females++;
- }
- else if(sex[node] == M) {
- diff -= females;
- males++;
- }
- for(register uint i = 0; i < (uint) graph[node].size(); i++) {
- DFS(graph[node][i], females, males);
- }
- }
- int main()
- {
- ifstream fin("company.in");
- ofstream fout("company.out");
- fin >> N;
- for(register uint i = 1; i <= N; i++)
- {
- uint sup;
- char tmps;
- fin >> sup;
- fin >> tmps;
- if(tmps == 'f')
- sex[i] = F;
- else
- sex[i] = M;
- if(sup == 0)
- boss = i;
- else
- graph[sup].push_back(i);
- }
- DFS(boss, 0, 0);
- fout << diff << '\n';
- fin.close();
- fout.close();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement