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. AJPFX总结方法的特点

    它可以实现独立的功能; 必须定义在类里面; 它只有被调用才会执行; 它可以被重复使用; 方法结束后方法里的对象失去引用;   如何定义一个功能,并通过方法体现出来: ① 明确该功能运算后的结果.明确返 ...

  2. Git之远程项目克隆到本地配置

    远程代码克隆到本地工作区,需要进行简单的配置,用于识别身份 1.git config --global user.name    [设置用户名,你的github用户名] 2.git config -- ...

  3. 【学习笔记】HTML position(static、fixed、relative、absolute)

    [本文转载] position的四个属性值:static.fixed.relative.absolute 下面分别讲述这四个属性:<div id="parent">   ...

  4. CocoaPods安装遇到的坑。

    //官方推荐地址 CocoaPods :http://code4app.com/article/cocoapods-install-usage cooped的安装  $(inherited) 报pod ...

  5. laravel学习笔记(三)

    模型传值 路由: Route::get('/posts/{post}','\App\Http\Controllers\PostController@show'); 方法: public functio ...

  6. IOS开发之关于UIButton点击没有响应问题

    1.如果一个UIButton的frame超出父视图的frame,UIButton还是可以显现的,但响应不了点击事件了,当开发中,遇到UIButton点击没有响应问题时,我们需要输出btn及它父视图的f ...

  7. 响应式布局(CSS3弹性盒flex布局模型)

    传统的布局方式都是基于盒模型的 利用display.position.float来布局有一定局限性 比如说实现自适应垂直居中 随着响应式布局的流行,CSS3引入了更加灵活的弹性布局模型 flex弹性布 ...

  8. gitlab利用ssh方式拉取代码

    问题1: Bad owner or permissions on .ssh/config的解决 当为本机配一个固定用户名远程登录某主机时,配置了一个config文件,但是在执行ssh免密码登录时报如下 ...

  9. Java中类,对象,方法的内存分配

    Java中类,对象,方法的内存分配 以下针对引用数据类型: 在内存中,类是静态的概念,它存在于内存中的CodeSegment中. 当我们使用new关键字生成对象时,JVM根据类的代码,去堆内存中开辟一 ...

  10. Microsoft Project 2010基础使用方法

    5.1 项目管理与Microsoft Project2010 Microsoft Project2010深受广大项目管理工程师的青睐. 5.1.1 项目管理的概念 项目管理是项目管理者在有限的资源约束 ...