UVALive 6437 Power Plant 【最小生成树 + 思维】
2018-01-13 19:26
274 查看
传送门
// 题意: 给定一幅带权图(n, m), 然后给定k个点, 每个点都要至少要和这k个点的一个点直接或间接相连, 问最少的花费是多少.(即不要的边我们直接删去, 只留我们要的那些边, 然后累加起来要最小.)
// 思路: 我们将那k个点就行缩点处理, 即把这k个点缩成一个点的编号, 然后存下来跑一遍最小生成树就行啦!!! 想到了很简单, 因为缩完点后就是一幅图, 然后我们求最小生成树就行了, 因为是树所以必然那k个点缩成的那个点一定会被选到, 然后就相当于从该点算出与其他点的最小距离. 也就是ans
AC Code
// 题意: 给定一幅带权图(n, m), 然后给定k个点, 每个点都要至少要和这k个点的一个点直接或间接相连, 问最少的花费是多少.(即不要的边我们直接删去, 只留我们要的那些边, 然后累加起来要最小.)
// 思路: 我们将那k个点就行缩点处理, 即把这k个点缩成一个点的编号, 然后存下来跑一遍最小生成树就行啦!!! 想到了很简单, 因为缩完点后就是一幅图, 然后我们求最小生成树就行了, 因为是树所以必然那k个点缩成的那个点一定会被选到, 然后就相当于从该点算出与其他点的最小距离. 也就是ans
AC Code
const int maxn = 2e2+5; int cas=1; struct node { int u, v ,w; bool operator < (const node& a) const { return w < a.w; } }e[maxn*maxn]; int n, m, k, cnt; bool a[maxn]; int fa[maxn]; int Find(int x) { return fa[x] == x ?x:fa[x] = Find(fa[x]); } void solve() { cin >> n >> m >> k ; Fill(a, 0); cnt = 0; for (int i = 1 ; i <= k ; i ++) { int x; cin >> x ; a[x] = 1; } for (int i = 0 ; i <= n ; i ++) { fa[i] = i; } for (int i = 1 ; i <= m ; i ++) { int u , v , w; cin >> u >> v >> w; if (a[u]) u = 0; if (a[v]) v = 0; e[++cnt] = node{u, v, w}; } sort(e+1, e+1+cnt); int ans = 0; int tot = 0; for (int i = 1 ; i <= cnt ; i ++) { int u = e[i].u, v = e[i].v, w = e[i].w; u = Find(u); v = Find(v); if (u != v) { ans += w; fa[u] = v; tot++; } if (tot >= n - k) break; } cout << ans << endl; }
相关文章推荐
- UVA Live 6437 Power Plant 最小生成树
- UVA Live 6437 Power Plant 最小生成树
- uva 6437 - Power Plant【最小生成树】
- Uva 6437 - Power Plant 裸最小生成树
- UVALive - 5713 最小生成树
- UVALive 3887 边权极差最小生成树模板
- UVALive 3662 Another Minimum Spanning Tree [离散化+线段树+最小生成树]
- UVALive-7303- Aquarium【最小生成树】【连通块】
- 【UVALive】5713 Qin Shi Huang's National Road System 最小生成树
- UVAlive 3662 Another Minimum Spanning Tree 莫队算法,曼哈顿最小生成树
- UVALive 3662 Another Minimum Spanning Tree 曼哈顿最小生成树
- UVALive 3662 Another Minimum Spanning Tree 曼哈顿最小距离生成树
- UVALive - 4848 Tour Belt(暴力+最小生成树)
- UVALive - 4872 最小生成树
- UVALive 7303 Aquarium 最小生成树
- LA 6437 Power Plant (prim最小生成树)
- UVALive 4872 Underground Cables 最小生成树
- B - Bus Problem UVALive - 7001 最小生成树
- LA 6437 Power Plant (prim最小生成树)
- Another Minimum Spanning Tree - UVaLive 3662 曼哈顿最小生成树