5 条题解
-
1
e· · · · · ·
#include <bits/stdc++.h> using namespace std; int n, u, v, w, ans = 1e9, dis[1005][1005], sum = 0; struct tree { int to, w; }; vector<tree> e[1005]; void dfs(int u, int fa, int sum) { ans = min(ans, sum); for (int i = 0; i < e[u].size(); i++) { int v = e[u][i].to; if (v == fa) continue; dfs(v, u, sum + e[u][i].w); } } int main() { cin >> n; for (int i = 1; i < n; i++) { cin >> u >> v >> w; e[u].push_back((tree){v, w}); e[v].push_back((tree){u, w}); } for (int i = 1; i <= n; i++) dfs(i, 0, 0); cout << ans; return 0; }
-
0
100分题解
枚举出任意两点的距离,找出最小值,时间复杂度:O(n²)
#include using namespace std; int n,u,v,w,a[1001][1001],ans = 999999; struct A { int V[1001],W[1001],num = 0; } U[1001]; void f(int x,int y,int z,int sum) { a[x][y] = sum; for (int i = 1;i <= U[y].num;i++) { if (U[y].V[i] != z) { f(x,U[y].V[i],y,sum + U[y].W[i]); } } } int main() { cin >> n; for (int i = 1;i < n;i++) { cin >> u >> v >> w; U[u].V[++U[u].num] = v; U[u].W[U[u].num] = w; U[v].V[++U[v].num] = u; U[v].W[U[v].num] = w; } for (int i = 1;i <= n;i++) { f(i,i,0,0); } for (int i = 1;i < n;i++) { for (int j = i + 1;j <= n;j++) { ans = min(ans,a[i][j]); } } cout << ans; return 0; }
-
-1
本题做法很多,考虑到数据范围就 ,所以最简单的做法就是枚举每个点作为起点时到其他所有点的距离,即选择当前点作为根时的每个节点的深度,采用
dfs
或bfs
皆可,时间复杂度为 ,这里给出bfs
的代码。int main() { cin >> n; for (int i = 1; i <= n - 1; i++) { int u, v, w; cin >> u >> v >> w; e[u].push_back((Edge){v, w}); e[v].push_back((Edge){u, w}); } int ans = 1000005; for (int i = 1; i <= n; i++) { while (!q.empty()) q.pop(); for (int j = 1; j <= n; j++) vis[j] = false; q.push(i); vis[i] = true; dis[i] = 0; while (!q.empty()) { int u = q.front(); q.pop(); for (int j = 0; j < e[u].size(); j++) { int v = e[u][j].v; int w = e[u][j].w; if (vis[v]) continue; dis[v] = dis[u] + w; vis[v] = true; q.push(v); ans = min(ans, dis[v]); } } } cout << ans << "\n"; return 0; }
-
-13
写题解请注意 鼓励大家写题解,但注意题解格式。
题解一定要有思路解析或代码注释,能否让别人理解你的思路
也是你的能力的检验,不要只放无意义的代码给大家复制,那就失去了做题的初心。
给代码两端加上这个会舒服一些
```cpp
你的代码
```
</span>
这个点在键盘的左上角tab上面那个键,注意切换输入法
#include<iostream> using namespace std; int main() { int n; cin>>n;//这是一个注释 return 0; }
请注意严禁抄袭题解,写题解不要只放代码,需加上你的思路或代码注释。
抄袭题解一经发现直接取消成绩。
题解被删除的可能
- 代码不符合格式规范
- 没有思路讲解或者没有注释,
- 无意义的题解
大家携手共同维护一个良好的编程环境,如果一经发现,多次作乱。可能会被管理员拉黑,请注意,一旦拉黑即失去登陆资格。
- 1
信息
- ID
- 1214
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 5
- 标签
- 递交数
- 319
- 已通过
- 122
- 上传者