题目,挺无聊的。一个裸的最短路。n个点,你住在0,要去买东西,每个点有一个关门时间,问能最早买到食物的时间。有两点注意 (1)有重边 (2) 原图是dicrect连接。。。但不是有向边,被这个误导了。direct当直接讲……原图无向图。后面就是裸的dijkstra算法。

数据范围 点 N [0..100] 不知道为啥还有0.。。。

连边 数 M [1..10000]

连边按3元祖给书 A 里面数据范围  [0..99] B 里面数据范围 [0..99]是节点 C [0..10^5]表示从A到B的时间

还有一个长度为N的数组D,表示关门时间,数值范围 [-1..10^9]表示关门时间,-1表示已经关门了。

返回能买到食品的最早时间,买不到输出-1。

要求复杂度 时间 O(N^2) 空间 O(N^2)。

// you can also use includes, for example:
// #include <algorithm> int solution(const vector<int> &A, const vector<int> &B, const vector<int> &C, const vector<int> &D) {
// write your code here...
int n = D.size(),i,ind,m = A.size();
if ((n == 0) || (D[0] >= 0)) {
return 0;
} vector<vector<int> > e;
e.resize(n); for (i = 0; i < n; ++i) {
e[i].resize(n, -1);
}
for (i = 0; i < m; ++i) {
if ((e[A[i]][B[i]] < 0) || (e[A[i]][B[i]] > C[i])) {
e[A[i]][B[i]] = e[B[i]][A[i]] = C[i];
}
}
vector<bool> mark;
mark.resize(n, false);
vector<int> d;
d.resize(n, -1);
d[0] = 0;
for (;;) {
ind = -1;
for (i = 0; i < n; ++i) {
if ((!mark[i]) && (d[i] >= 0) && ((ind < 0) || (d[ind] > d[i]))) {
ind = i;
}
}
if (ind < 0) {
break;
}
if (d[ind] <= D[ind]) {
return d[ind];
}
mark[ind] = true;
for (i = 0; i < n; ++i) {
if ((!mark[i]) && (e[ind][i] >= 0) && ((d[i] < 0) || (d[i] > d[ind] + e[ind][i]))) {
d[i] = d[ind] + e[ind][i];
}
}
}
return -1;
}

codility上的问题(26) Hydrogenium 2013的更多相关文章

  1. codility上的练习 (1)

    codility上面添加了教程.目前只有lesson 1,讲复杂度的……里面有几个题, 目前感觉题库的题简单. tasks: Frog-Jmp: 一只青蛙,要从X跳到Y或者大于等于Y的地方,每次跳的距 ...

  2. codility上的问题(15) Xi 2012

    进入2012年的题 codility上的题目开始变难,变得有意思起来.给定两个长度在[1..300000]的只包含0和1的串S和T,它们是2进制表示的,S表示的数A不大于T表示的数B,即A<=B ...

  3. codility上的练习(5)

    codility出了lesson 5了. (1) 合法括号序列,包括( [ { ) ] }这6种字符的字符串,长度N在[0..200000]范围内,为其是否合法. 要求时间复杂度O(N),空间复杂度O ...

  4. codility上的问题(34) Fluorum 2014

    好久没写codility的题了.一来没时间,二来有的题目不太好分析.这个题比較有意思,我还没有给出很严格的证明.

  5. codility上的问题 (19)Sigma 2012

    题目: 像最大直方图一样给定一个数组是每个单位长度上的高度,求至少几个矩形可以拼出这个形状. 例如:给出的数组 H[0] = 8 H[1] = 8 H[2] = 5 H[3] = 7 H[4] = 9 ...

  6. codility上的问题 (21) Upsilon 2012

    这是我目前最喜欢的codiltiy上的问题之一.问题描述是:给定一个整数数组A,所有的数均不相同.假设下标从0开始,找到一个数组B, 满足A[B[0]] > A[B[1]] > A[B[2 ...

  7. windows 2012R2 上必须要用sharepoint 2013 sp1.

    已经确认. 虽然有人讲以下powershell可以帮助安装sharepoint 2013. 不过不是每次都可以的 Import-Module ServerManager Add-WindowsFeat ...

  8. codility上的问题 (23)Chi 2012

    这个题也比较有意思.意思是给定一个数组A,长度为M,里面都是正整数,代表每块地形的高度.现在要测试一种加农炮,给定一个炮弹的高度H, 如果存在最小的I,满足0 < I <  M,满足A[I ...

  9. codility上的问题 (22)

    问题描述: 用1 * 1, 1 * 2的矩形覆盖一个n行m列的矩形,问有多少种方法. 数据范围 : n [1..10^6],  m [ 1..7] 要求复杂度: 时间  O(log(n) * 8 ^m ...

随机推荐

  1. What day is that day?(快速幂,打表找周期,或者求通项公式)

    有些题怎么都解不出来,这时候可以打表,找规律,求通项公式等,这些方法让人拍手叫绝,真不错…… Description It's Saturday today, what day is it after ...

  2. BZOJ 1782: [Usaco2010 Feb]slowdown 慢慢游( BIT + dfs )

    orz...hzwer 对着大神的 code 看 , 稍微理解了. 考虑一只牛到达 , 那它所在子树全部 +1 , 可以用BIT维护 --------------------------------- ...

  3. Android 开发笔记 “SharePreference 数据存取”

    除了SQLite数据库外,SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息.其存储位置在/data ...

  4. (IOS)N duplicate symbols for architecture i386

    Xcode编译时的error,出现此情况的汇总引用如下: 1.可能存在两个main入口: 2.导入的.h文件可能误写为.m: 3.两文件间可能存在重复定义的全局变量名: 4.使用#include导入文 ...

  5. 基于visual Studio2013解决C语言竞赛题之0302字符数出

     题目 解决代码及点评 根据题目要求,只要根据用户输入的字母,判断字母之后,给出相应的输出即可 在以下代码中,f32函数实现了该功能,通过if条件判断语句 #include <stdio.h ...

  6. Vijos P1680距离

    题目 背景 简单的DP 描述 设有字符串X,我们称在X的头尾及中间插入任意多个空格后构成的新字符串为X的扩展串,如字符串X为”abcbcd”,则字符串“abcb_c_”,“_a_bcbcd_”和“ab ...

  7. 解析LayoutSubviews

    layoutSubviews作用 layoutSubviews是对subviews重新布局.比如,我们想更新子视图的位置的时候,可以通过调用layoutSubviews方法,既可以实现对子视图重新布局 ...

  8. Java for循环用法

    Java中for循环多了一种写法--foreach写法(一般仅仅用于遍历整个数组,不用操心越界等问题). 1.1)常规写法: package foreach.main.sn; public class ...

  9. 免费的HTML5连载来了《HTML5网页开发实例具体解释》连载(六)媒体查询

    响应式设计的还有一个重要技术手段是媒体查询.假设仅仅是简单的设计一个流式布局系统,那么能够保证每一个网格按比例的放大和缩小,但有可能会使得在小屏幕下(如手机设备)网格太小而严重影响阅读,这种设计称不上 ...

  10. UIBezierPath详解

    使用UIBezierPath类可以创建基于矢量的路径,这个类在UIKit中.此类是Core Graphics框架关于path的一个封装.使用此类可以定义简单的形状,如椭圆或者矩形,或者有多个直线和曲线 ...