Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <stack>
- #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 = boss;
- uint females = 0, males = 0;
- stack<uint> s;
- s.push(boss);
- while(!s.empty())
- {
- node = s.top(); s.pop();
- if(sex[node] == F){
- diff += males;
- females++;
- }
- else {
- diff -= females;
- males++;
- }
- for(uint i = 0; i < graph[node].size(); i++) {
- s.push(graph[node][i]);
- }
- s.pop();
- if(sex[node] == F) females--;
- else males--;
- }
- }
- int main()
- {
- ifstream fin("company.in");
- ofstream fout("company.out");
- fin >> N;
- for(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();
- fout << diff << '\n';
- fin.close();
- fout.close();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement