博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[topcoder]KingdomReorganization
阅读量:5146 次
发布时间:2019-06-13

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

这道题是最小生成树,但怎么转化是关键。首先是把所有的路都destroy掉,得到基本的MassiveCost,然后在选MST的过程中,遇上这些边相当于还回去,它们的cost就是-destroy[i][j]。这样转化完毕。

用Kruskal来做,注意生成Edge的过程,第二层循环j要从i+1开始,主要是避免把i到i的路也放进去。

此题算是比较经典的K算法的题了。(没有用并查集)

import java.util.*;public class KingdomReorganization{    public int getCost(String[] kingdom, String[] build, String[] destroy)    {        ArrayList
edges = new ArrayList
(); int len = kingdom.length; int basicCost = 0; // create edges with cost for (int i = 0; i < len; i++) { for (int j = i+1; j < len; j++) { Edge edge = new Edge(); edge.a = i; edge.b = j; if (kingdom[i].charAt(j) == '0') { edge.cost = getValue(build, i, j); } else { int tmp = getValue(destroy, i, j); basicCost += tmp; edge.cost = -tmp; } edges.add(edge); } } // Kruskal algo Collections.sort(edges); int[] color = new int[len]; for (int i = 0; i < len; i++) { color[i] = i; } int cost = basicCost; for (int i = 0; i < edges.size(); i++) { Edge e = edges.get(i); if (color[e.a] == color[e.b]) continue; cost += e.cost; int oldColor = color[e.a]; for (int k = 0; k < len; k++) { if (color[k] == oldColor) { color[k] = color[e.b]; } } } return cost; } private int getValue(String[] costs, int i, int j) { char c = costs[i].charAt(j); if (c >= 'A' && c <= 'Z') { return c - 'A'; } else return c - 'a' + 26; }}class Edge implements Comparable
{ public int a; public int b; public int cost; public int compareTo(Edge rhs) { return this.cost - rhs.cost; }}

  

转载于:https://www.cnblogs.com/lautsie/p/3350059.html

你可能感兴趣的文章
Android Studio 生成 Xutils3 注入的插件
查看>>
8th week blog 2
查看>>
LeetCode之Add Two Numbers
查看>>
Noj(1070)
查看>>
sql server 由于登入失败而无法启动服务
查看>>
RST_n的问题
查看>>
欢迎来我的#百度相册#时光轴,坐上时光机,与我一起穿梭时空!
查看>>
------结对作业代码复审-----
查看>>
ASP.NET 获得当前网页名字
查看>>
windows pear 安装
查看>>
RabbitMQ安装详解(centos6.8)(转自:http://www.cnblogs.com/zhen-rh/p/6862350.html)
查看>>
hdu 2565 放大的X
查看>>
前缀表达式
查看>>
java基础面试题常出现(一)
查看>>
练习jQuery
查看>>
Java面试题--基础知识部分
查看>>
编译器结构
查看>>
jvm 指令重排
查看>>
PL/SQL 游标详解
查看>>
php随机输出验证码
查看>>