[topcoder]BestRoads
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的更多相关文章
- TopCoder kawigiEdit插件配置
kawigiEdit插件可以提高 TopCoder编译,提交效率,可以管理保存每次SRM的代码. kawigiEdit下载地址:http://code.google.com/p/kawigiedit/ ...
- 记第一次TopCoder, 练习SRM 583 div2 250
今天第一次做topcoder,没有比赛,所以找的最新一期的SRM练习,做了第一道题. 题目大意是说 给一个数字字符串,任意交换两位,使数字变为最小,不能有前导0. 看到题目以后,先想到的找规律,发现要 ...
- TopCoder比赛总结表
TopCoder 250 500 ...
- Topcoder几例C++字符串应用
本文写于9月初,是利用Topcoder准备应聘时的机试环节临时补习的C++的一部分内容.签约之后,没有再进行练习,此文暂告一段落. 换句话说,就是本文太监了,一直做草稿看着别扭,删掉又觉得可惜,索性发 ...
- TopCoder
在TopCoder下载好luncher,网址:https://www.topcoder.com/community/competitive%20programming/ 选择launch web ar ...
- TopCoder SRM 596 DIV 1 250
body { font-family: Monospaced; font-size: 12pt } pre { font-family: Monospaced; font-size: 12pt } P ...
- 求拓扑排序的数量,例题 topcoder srm 654 div2 500
周赛时遇到的一道比较有意思的题目: Problem Statement There are N rooms in Maki's new house. The rooms are number ...
- TopCoder SRM 590
第一次做TC,不太习惯,各种调试,只做了一题...... Problem Statement Fox Ciel is going to play Gomoku with her friend ...
- Topcoder Arena插件配置和训练指南
一. Arena插件配置 1. 下载Arena 指针:http://community.topcoder.com/tc?module=MyHome 左边Competitions->Algorit ...
随机推荐
- eclipse和android studio导入工程的错误
eclipse中导入工程,需要注意导入的工程是什么,android 工程和java工程是有区别的.如果导入错误了,调起来也比较麻烦.因为入口错了呀. 特别在android studio工程,从其它人的 ...
- ACM——2的n次方
2的N次方 时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte 总提交:1715 测试通过:838 描述 编程精确计算2 ...
- c#安全性、稳定性、高性能需要注重的点
1.弱事件 2.类型安全(包括类型转换时可能的异常) 3.线程安全 5.装箱和拆箱 6.闭包传递局部变量时可能遇到的问题. 7.用于dictionary的键,要同时实现GetHashCode和Equa ...
- gulp+browserSync+nodemon 实现express 全端自动刷新的实践
学习过程宝宝心里苦,不能怨政府.. 兴趣所致,一直放不下nodejs的学习,时隔多日,又把express捡起来打算重新再学学,一直没什么太大的长进,和实际的项目经验.真的醉了,太懒了. 今天在重新研究 ...
- java新手笔记19 抽象类
1.Shap package com.yfs.javase; public class Shape /*extends Object */{ //默认继承object object方法全部继承 //计 ...
- Ibatis学习记录
几大要素:1.jdbc.properties //数据库连接配置2.SqlMapContext.xml //主配置文件3.user_SqlMap.xml //映射文件4.三层框架 创建Ibatis工程 ...
- windows server 2008镜像重启后密码变为默认密码的问题的解决方案
1. cmd中执行regedit,打开注册表: 修改HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Cloudbase Solusions\Cloudbase-Init ...
- (hdu)5234 Happy birthday 二维dp+01背包
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5234 Problem Description Today is Gorwin’s birt ...
- (转)Libevent(5)— 连接监听器
转自:http://name5566.com/4220.html 参考文献列表:http://www.wangafu.net/~nickm/libevent-book/ 此文编写的时候,使用到的 Li ...
- HTML5 声明兼容IE的写法
<!DOCTYPE html> <!–[if IE]> <meta http-equiv=”X-UA-Compatible” content=”IE=8″ /> & ...