1 条题解

  • -2
    @ 2021-10-07 14:15:34

    题目不难,模拟即可。

    文件操作请自行删除。

    #include <bits/stdc++.h>
    using namespace std;
    vector<pair<int, int> > gv[100001];
    int sm[100001];
    // Add an edge of length n between u and v.
    void add_edge(int u, int v, int n){
        gv[u].push_back(make_pair(v, n));
        gv[v].push_back(make_pair(u, n));
    }
    // Calculates The smallest length of the path from i to the root.
    void dfs(int n, int fa){
        for(int i = 0;i < gv[n].size();i++){
            if(gv[n][i].first == fa){
                continue;
            }
            sm[gv[n][i].first] = min(sm[n], gv[n][i].second);
            dfs(gv[n][i].first, n);
        }
    }
    int main(){
        freopen("mootube.in", "r", stdin);
        freopen("mootube.out", "w", stdout);
        int n, q;
        cin >> n >> q;
        for(int i = 0;i < n - 1;i++){
            int u, v, x;
            cin >> u >> v >> x;
            add_edge(u, v, x);
        }
        for(int i = 0;i < q;i++){
            int k, v;
            cin >> k >> v;
            memset(sm, 0x3f3f3f3f, sizeof(sm));
            dfs(v, -1);
            sm[v] = 0;
            int ans = 0;
            for(int j = 1;j <= n;j++){
                if(sm[j] >= k){
                    ans++;
                }
            }
            cout << ans << endl;
        }
        fclose(stdin), fclose(stdout);
        return 0;
    }
    
  • 1

信息

ID
1017
难度
6
分类
(无)
标签
递交数
3
已通过
3
通过率
100%
被复制
1
上传者