CCCPaste

Untitled

#include 
  
using namespace std;
typedef long long ll;
const int INF = (1<<30);
const ll inf = (1LL << 55LL);
const int maxn = 300004;
vector graph[maxn];
int arr[maxn];
int parent[maxn];
bool visited[maxn];
//1000000000
int n, S;
 
int tmpArr[maxn];
int ret;
void dfs(int node){
    if(node == 0){
        return;
    }
    int sosed;
    for(int i =0 ; i <(int)graph[node].size(); i ++){
        sosed = graph[node][i];
        if(sosed != parent[node])continue;
        if(tmpArr[node] > tmpArr[sosed]){
            ret ++;
            tmpArr[sosed] = tmpArr[node] ;
            dfs(sosed);
        }
    }
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin >> n >> arr[0];
    int a, b;
    for(int i = 1; i <= n; i ++){
        cin >> arr[i] >> b;
        a = i;
        parent[i] = b;
        graph[a].push_back(b);
        graph[b].push_back(a);
    }
    for(int j = 0; j <= n; j ++){
            tmpArr[j] = arr[j];
        }
    for(int i = 1; i <= n; i ++){
  
        ret = 0;
        S = i;
        dfs(i);
        cout << ret << "\n";
    }
    return 0;
}