1 条题解
-
-2GCOJ Official (Cui2010) LV 8 MOD @ 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
- 上传者