博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷P4716 【模板】最小树形图(朱刘算法)
阅读量:6670 次
发布时间:2019-06-25

本文共 1729 字,大约阅读时间需要 5 分钟。

题意

Sol

朱刘算法?感觉又是一种神仙贪心算法

大概就是每次贪心的用每个点边权最小的入边更新答案,如果不行的话就缩起来找其他的边

不详细说了,丢走人..

#include
using namespace std;const int MAXN = 1e5 + 10, INF = 1e9 + 10;inline int read() { char c = getchar(); int x = 0, f = 1; while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();} while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar(); return x * f;}int N, M, R, fa[MAXN], mn[MAXN], id[MAXN], vis[MAXN];struct Edge { int u, v, w, nxt;}E[MAXN];int head[MAXN], num = 1;inline void AddEdge(int x, int y, int z) { E[num] = (Edge) {x, y, z, head[x]}; head[x] = num++;}int ZhuLiu() { int ans = 0; while("attack is a pig") { for(int i = 1; i <= N; i++) id[i] = vis[i] = 0, mn[i] = INF; int cnt = 0; for(int i = 1; i <= M; i++) if((E[i].u != E[i].v) && (E[i].w < mn[E[i].v])) mn[E[i].v] = E[i].w, fa[E[i].v] = E[i].u; int x; mn[R] = 0;//tag for(int i = 1; i <= N; i++) { if(mn[i] == INF) return -1; ans += mn[i]; for(x = i; (!id[x]) && x != R && (vis[x] != i); x = fa[x]) vis[x] = i; if(x != R && (!id[x])) { id[x] = ++cnt; for(int t = fa[x]; t != x; t = fa[t]) id[t] = cnt; } } if(!cnt) return ans; for(int i = 1; i <= N; i++) if(!id[i]) id[i] = ++cnt; for(int i = 1; i <= M; i++) { int tmp = mn[E[i].v]; if((E[i].u = id[E[i].u]) != (E[i].v = id[E[i].v])) E[i].w -= tmp; } N = cnt; R = id[R]; } return ans;}int main() { memset(head, -1, sizeof(head)); N = read(); M = read(); R = read(); for(int i = 1; i <= M; i++) { int x = read(), y = read(), z = read(); AddEdge(x, y, z); } printf("%d", ZhuLiu()); return 0;}

转载地址:http://ywlxo.baihongyu.com/

你可能感兴趣的文章
.NET中的六个重要概念:栈、堆、值类型、引用类型、装箱和拆箱
查看>>
正则表达式匹配html标签里面的内容
查看>>
window.open()的具体使用方法
查看>>
数学分析_Tom Apostol_习题 9.1
查看>>
myeclipse删除项目后重新导入
查看>>
在进入新版本 的时候,进行推送引导
查看>>
Django 下载和初识
查看>>
HBase + Solr Cloud实现HBase二级索引
查看>>
移动端bug集合
查看>>
git的使用(本地版本库)
查看>>
[网页游戏开发]Morn简介及使用教程
查看>>
oracle where 条件的执行顺序分析1
查看>>
sql server 2008学习5 sql基础
查看>>
windows store app promise
查看>>
网络七层架构一句话简述
查看>>
zoj 2339 Hyperhuffman 哈夫曼编码 (c)
查看>>
函数类型
查看>>
Break和Continue的用法
查看>>
backbone 学习之history
查看>>
【Java】数组升序和降序
查看>>