http://community.topcoder.com/stat?c=problem_statement&pm=10172&rd=13515

http://community.topcoder.com/tc?module=Static&d1=match_editorials&d2=srm424

这道题目是和最小生成树有关。记得最小生成树的一个算法(容易实现的那个),Kruskal,要用到并查集。想想就是以边为主,那么才可能形成多个边的集合,然后再合并。
并查集的n次合并查找的复杂度是o(n)。TopCoder的思想似乎主要是快速实现解决问题,对复杂度的要求一般,所以这里简单的链式实现就够用了,复杂度是一次合并o(n)(果然比之前好的数据结构复杂度大大增加啊)。
另外返回一个空的数组是直接return new int[]{}就行了。

public class BestRoads
{
public int[] numberOfRoads(String[] roads, int M)
{
int N = roads.length;
char[][] matrix = new char[N][N];
for (int i = 0; i < N; i++)
{
matrix[i] = roads[i].toCharArray();
} int id[] = new int[N]; // simple joint-set
for (int i = 0; i < N; i++)
{
id[i] = i;
}
int deg[] = new int[N];
int CmpCnt = 0;
for (int i = 0; i < N; i++)
{
for (int j = i+1; j < N; j++)
{
if (matrix[i][j] == 'N' || id[i] == id[j]) continue;
int idi = id[i]; int idj = id[j];
matrix[i][j] = 'N'; matrix[j][i] = 'N';
deg[i]++; deg[j]++;
M--; CmpCnt++;
for (int t = 0; t < N; t++)
{
if (id[t] == idi) id[t] = idj;
}
}
}
if (CmpCnt != N-1) return new int[]{}; // not connected; for (int i = 0; i < N && M > 0; i++)
{
for (int j = i+1; j < N && M > 0; j++)
{
if (matrix[i][j] == 'Y')
{
matrix[i][j] = 'N';
matrix[j][i] = 'N';
deg[i]++; deg[j]++;
M--;
}
}
}
if (M > 0) return new int[]{};
return deg;
}
}

[topcoder]BestRoads的更多相关文章

  1. TopCoder kawigiEdit插件配置

    kawigiEdit插件可以提高 TopCoder编译,提交效率,可以管理保存每次SRM的代码. kawigiEdit下载地址:http://code.google.com/p/kawigiedit/ ...

  2. 记第一次TopCoder, 练习SRM 583 div2 250

    今天第一次做topcoder,没有比赛,所以找的最新一期的SRM练习,做了第一道题. 题目大意是说 给一个数字字符串,任意交换两位,使数字变为最小,不能有前导0. 看到题目以后,先想到的找规律,发现要 ...

  3. TopCoder比赛总结表

    TopCoder                        250                              500                                 ...

  4. Topcoder几例C++字符串应用

    本文写于9月初,是利用Topcoder准备应聘时的机试环节临时补习的C++的一部分内容.签约之后,没有再进行练习,此文暂告一段落. 换句话说,就是本文太监了,一直做草稿看着别扭,删掉又觉得可惜,索性发 ...

  5. TopCoder

    在TopCoder下载好luncher,网址:https://www.topcoder.com/community/competitive%20programming/ 选择launch web ar ...

  6. TopCoder SRM 596 DIV 1 250

    body { font-family: Monospaced; font-size: 12pt } pre { font-family: Monospaced; font-size: 12pt } P ...

  7. 求拓扑排序的数量,例题 topcoder srm 654 div2 500

    周赛时遇到的一道比较有意思的题目: Problem Statement      There are N rooms in Maki's new house. The rooms are number ...

  8. TopCoder SRM 590

     第一次做TC,不太习惯,各种调试,只做了一题...... Problem Statement     Fox Ciel is going to play Gomoku with her friend ...

  9. Topcoder Arena插件配置和训练指南

    一. Arena插件配置 1. 下载Arena 指针:http://community.topcoder.com/tc?module=MyHome 左边Competitions->Algorit ...

随机推荐

  1. I2C Verilog的实现(一)

    <span style="font-size:14px;">`timescale 1ns / 1ps module test( sda ); reg scl; inou ...

  2. 设置repeater每行多少个的方法

    前台代码: <asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="server">< ...

  3. Win10 10586 更新

    最近发现,电脑c盘突然少了许多,发现c盘多了个windowsBT文件夹,大概6个G,恩,win10 又推出更新了,版本10586. 不知道为啥,更新时win10 把原来的下载的删除了,大概出了什么错误 ...

  4. Asp.Net部分面试题

    HTML.javascript部分 1. jQuery的美元符号$有什么作用? 答:个人理解:$指代jquery对象,拥有jquery对象所有的属性和成员 网友理解:在Jquery中,$是JQuery ...

  5. java新手笔记5 类

    1.进制转换 /* 企业发放的奖金根据利润提成. 利润(I)低于或等于10万元时,奖金可提10%: 利润高于10万元,低于20万元时, 低于10万元的部分按10%提成,高于10万元的部分,可提成7.5 ...

  6. (转) UIALertView的基本用法与UIAlertViewDelegate对对话框的事件处理方法

    首先,视图控制器必须得实现协议UIAlertViewDelegate中的方法,并指定delegate为self,才能使弹出的Alert窗口响应点击事件. 具体代码如下: #import <UIK ...

  7. MongoDB笔记(一)MongoDB概述和安装

    概述 关键词:关系数据库.非关系数据库 关系数据库: 关系数据库,是建立在关系数据库模型基础上的数据库,借助于集合代数等概念和方法来处理数据库中的数据.目前主流的关系数据库有oracle.SQL.ac ...

  8. if参数小结

    条件表达式 if [ -f  file ]    如果文件存在 if [ -d ...   ]    如果目录存在 if [ -s file  ]    如果文件存在且非空 if [ -r file  ...

  9. Spring---Web MVC关于前台传值转换问题

    Cannot convert value of type [java.lang.String] to required type [java.util.List]. 问题在于:(String to E ...

  10. localstorage 使用

    localstorage作为HTML5的一个特殊属性,在发布时就备受关注:最近总结了其一些小的用法,希望可以抛砖引玉. 因HTML5本地存储只能存字符串,所以所有数据存储的话,都要转化成字符串:而js ...