BZOJ 2563
-
题目
-
分析
贪心
一般这种问题的贪心都是对等效权值进行贪心构造。所以可以将边权等效到两个连接的点构成点权。又因为在同一选择集合中的两个点 a , b a,b a,b 如果有边相连的情况,那么在计算 a , b a,b a,b 的点权时边权只用计算一次,所以化边权为点权时除以了 2 2 2 。不在一个选择集合的两个点的边权值会通过相减抵消,不用计算。
-
代码
const int N = 10005; double w[N]; double _, __; bool cmp(double a, double b) { return a > b; } int main () { //freopen("input.in", "r", stdin); //freopen("test.out", "w", stdout); int n, m; read(n); read(m); for (int i = 1; i <= n; i++) scanf("%lf", &w[i]); for (int i = 1; i <= m; i++) { int u, v, val; read(u); read(v); read(val); w[u] += val / 2.0; w[v] += val / 2.0; } sort(w + 1, w + 1 + n, cmp); for (int i = 1 ; i <= n; i++) { if (i % 2) _ += w[i]; else __ += w[i]; } printf("%.0f\n", _ - __); return 0 ; }
-
题型
贪心