## Solution:

Sort the salary. So that sort the `value`

for this structure:

```
static class Node {
int x, y, value;
}
```

We build a dynamic disjoint set. In the beginning, there only be $n$ lower-level employees. And the father of these employees is empty. (Note that, the father is not himself.)

Because salary is sorted. Therefore, it is ok to put `node.x`

and `node.y`

into a set in order of salary.

We get the root father of `x`

and `y`

. Let's call it `boss_x`

and `boss_y`

. If the salary of these two bosses is the same and their salary is equal to `node.value`

. Then `x`

and `y`

already under the same boss.

Else if, only one of the salaries of bosses is equal `value`

. Then we know, another boss should be the subordinates of these boss.

Else if again, if the salaries of boss is less than `value`

. Then we know, we create a new boss. The salary of this new boss is `node.value`

. And this new boss is the boss of `boss_x`

and `boss_y`

.