90分,不知道错在哪里了,dijkstra算法,用一个数组的d[i]表示以i点结尾的小路的长度,以i点为中心扩展时,若下一点为k,如果i->k是小路,则

d[j] = d[k]+M[k][j];dist[j] = min_ - pow(d[k], 2) + pow(d[j], 2);

否则直接加路径长度即可,同时把d[j]=0

#include <iostream>
#include <cstdio>
#include <climits>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
const int INF = 100000000;
const int MAXN = 505;
int M[MAXN][MAXN];
int kind[MAXN][MAXN];
int dijkstra(int n)
{
int flag[MAXN];
long long dist[MAXN];
int k;
int d[MAXN];
memset(flag, 0, sizeof(flag));
memset(d, 0, sizeof(d));
for (int i = 0; i < n; i++)
{
if (M[0][i] > 0)
{
if (kind[0][i] == 0)
dist[i] = M[0][i];
else
{
dist[i] = pow(M[0][i], 2);
d[i] = M[0][i];
}
}
else
dist[i] = -1; }
flag[0] = 1;
dist[0] = 0;
for (int i = 1; i < n; i++)
{
int min_ = INF;
for (int j = 0; j < n; j++)
{
if (!flag[j]&&dist[j]>0&&dist[j]<min_)
{
min_ = dist[j];
k = j;
}
}
flag[k] = 1;
for (int j = 0; j < n; j++)
{
if (!flag[j] && M[j][k]>0)
{
if (dist[j] < 0)
{
if (kind[k][j] == 0)
{
d[j] = 0;
dist[j] = min_ + M[j][k];
}
else
{
d[j] = d[k]+M[j][k];
dist[j] = min_ - pow(d[k], 2) + pow(d[k] + M[j][k],2);
}
continue;
}
if (dist[j] > 0)
{
if (kind[k][j] == 0)
{
if (dist[j] > min_ + M[j][k])
{
dist[j] = min_ + M[j][k];
d[j] = 0;
}
}
else
{
int temp = min_ - pow(d[k], 2) + pow(d[k] + M[k][j], 2);
if (dist[j] > (min_ - pow(d[k], 2) + pow(d[k]+M[k][j], 2)))
{
d[j] = d[k]+M[k][j];
dist[j] = min_ - pow(d[k], 2) + pow(d[j], 2);
}
}
continue;
}
}
} }
return dist[n-1];
}
int main()
{
int n, m;
while (~scanf("%d %d",&n,&m))
{
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
if (i == j)M[i][j] = 0;
else M[i][j] = -1;
memset(kind, 0, sizeof(kind));
for (int i = 0; i < m; i++)
{
int k, a, b, c;
scanf("%d %d %d %d", &k, &a, &b, &c);
M[a-1][b-1] = M[b-1][a-1] = c;
kind[a-1][b-1] = kind[b-1][a-1] = k;
}
cout<<dijkstra(n)<<endl; }
return 0;
}

CCF 201712-4 90分的更多相关文章

  1. 利用条件运算符的嵌套来完成此题:学习成绩> =90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。

    利用条件运算符的嵌套来完成此题:学习成绩> =90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示. import java.util.Scanner; public clas ...

  2. 根据考试成绩输出对应的礼物,90分以上爸爸给买电脑,80分以上爸爸给买手机, 60分以上爸爸请吃一顿大餐,60分以下爸爸给买学习资料。 要求:该题使用多重if完成

    package com.Summer_0417.cn; import java.util.Scanner; /** * @author Summer * 根据考试成绩输出对应的礼物, * 90分以上爸 ...

  3. 读“40 分,60 分,90 分”

    原文链接: http://mp.weixin.qq.com/s?__biz=MzA5MjYyNzY1OQ==&mid=2650901947&idx=1&sn=89af64d3b ...

  4. 学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用利用条件运算符的嵌套来完成此题:C表示。

    # -*- coding: utf8 -*- # Author:wxq #python 2.7 #题目:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用利用条件运算符 ...

  5. 利用条件运算符的嵌套来完成此题: 学习成绩>= 90分的同学用A表示, 60-89分之间的用B表示, 60分以下的用C表示。

    题目:利用条件运算符的嵌套来完成此题: 学习成绩>= 90分的同学用A表示, 60-89分之间的用B表示, 60分以下的用C表示. 程序分析:(a> b)?a:b这是条件运算符的基本例子. ...

  6. 代码实现:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。

    package com.loaderman.Coding; import java.util.Scanner; /*利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分 ...

  7. Splay(区间翻转)&树套树(Splay+线段树,90分)

    study from: https://tiger0132.blog.luogu.org/slay-notes P3369 [模板]普通平衡树 #include <cstdio> #inc ...

  8. 推荐收藏:100道Linux笔试题,能拿90分以上的都去了BAT

    本套笔试题共100题,每题1分,共100分.(参考答案在文章末尾) 1. cron 后台常驻程序 (daemon) 用于: A. 负责文件在网络中的共享 B. 管理打印子系统 C. 跟踪管理系统信息和 ...

  9. 题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。

    public class Five_05 { public static void main(String[] args) { Scanner input=new Scanner(System.in) ...

随机推荐

  1. Java GC基础

    Java的垃圾回收机制负责回收无用对象占据的内存资源,但是有特殊情况:假定对象不是使用new关键字获得了一块儿“特殊”的内存区域,

  2. 【C#】枚举

    枚举 public static class CommonEnums { public enum people { /// <summary> ///男人 /// </summary ...

  3. Java并发——ThreadPoolExecutor线程池解析及Executor创建线程常见四种方式

    前言: 在刚学Java并发的时候基本上第一个demo都会写new Thread来创建线程.但是随着学的深入之后发现基本上都是使用线程池来直接获取线程.那么为什么会有这样的情况发生呢? new Thre ...

  4. IOS代码收集

    http://mobile.51cto.com/hot-410417.htm 退回输入键盘: - (BOOL) textFieldShouldReturn:(id)textField{ [textFi ...

  5. COGS 1361. 树

    ★   输入文件:treed.in   输出文件:treed.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述] 在一个凉爽的夏夜,xth和rabbit来到花园里砍树.为啥 ...

  6. Hibernate Lazy属性与懒加载 整理

    lazy概念:要用到的时候,再去加载,对于关联的集合来说,只有当访问到的时候,才去加载它所关联的集合,比如一个user对应很多权限,只有当user.getRights()的时候,才发出select r ...

  7. powerDesigner 把name项添加到注释(comment),完美方案!

    第一次写博客,分享一点经验吧,平时大家用powerDesigner的时候,pd是不会把name项默认添加到comment的,所以生成的数据库表里面也没有中文字段的注释. 我在网上查了一下.有解决方案了 ...

  8. Bootstrap学习笔记之Nestable可拖拽树结构

    Nestable是基于Bootstrap的一个可拖拽的树结构表现插件. 下面粗略的介绍一下它的用法,只作为学习参考,如有不合适之处,请各位凑合看. 下图是我在现在系统中用到的Nestable,对系统模 ...

  9. bzoj3307 雨天的尾巴 题解(线段树合并+树上差分)

    Description N个点,形成一个树状结构.有M次发放,每次选择两个点x,y 对于x到y的路径上(含x,y)每个点发一袋Z类型的物品.完成 所有发放后,每个点存放最多的是哪种物品. Input ...

  10. 获取指定点的RGB值

    实现效果: 知识运用: Color对象的RGB属性 实现代码: private void button1_Click(object sender, EventArgs e) { OpenFileDia ...