题目描述

公元22××年,宇宙中最普遍的交通工具是spaceship。spaceship的出现使得星系之间的联系变得更为紧密,所以spaceship船长也成了最热门的职业之一。当然,要成为一名出色的船长,必须通过严格的考核,例如下面是最简单的问题中的一个。

用1~n的整数给n个星系标号,目前你在标号为1的星系,你需要送快递到标号为n的星系,星系之间由于存在陨石带,并不是都可以直连的。同时,由于超时空隧道的存在,在某些星系间飞行会出现时间静止甚至倒流,飞行时间为0或为负数。另外,由星系i到星系j的时间和由星系j到星系i的时间不一定是相同的。

在寄出日期之前收到快递被认为是不允许的,所以每部spaceship上都有一个速度调节装置,可以调节飞行的时间。简单来说其功能就是让所有两个星系间的飞行时间(如果可以直达)都增加或减少相同的整数值,你的任务就是调整速度调节器,找出一条用最短时间完成任务的路径,并且保证这个最短时间的值大于或等于0。

输入格式

输入文件包含多组数据,第1个数为T,表示数据的数量。

对于每一组数据,输入第1行为两个正整数N(2≤N≤100),E(1≤E≤N*(N-1)/2),为星系的个数和星系间飞行的路线数。然后E行,每行三个整数i,j和t(1≤i,j≤N,i≠j,-100000≤t≤100000),表示由星系i到星系j飞行的时间为t。由i到j最多只会有一条飞行线路。

输出格式

输出文件共T行,每组数据输出一行;

如果可以通过调节速度调节器完成任务,则输出一个非负整数,表示由星系1到星系N的最短时间。

如果不能由星系1到达星系N,则输出-1。

本来想错了以为是二分+判负圈 看了数据之后才发现有的负圈不能到达终点 所以判负圈的时候要判断更新的节点是否可以到达终点 这个可以弗洛伊德预处理一下 嗯

期中考试又一次爆炸 呵呵 笑什么笑

 #include<iostream>
 #include<cstdio>
 #include<cstring>
 #include<queue>
 #include<vector>
 using namespace std;
 ;
 <<;
 struct Edge{
     int from,to,dist;
 };
 vector<Edge> edges;
 vector<int> G[maxn];
 int n,e,v[maxn],d[maxn],inq[maxn],cnt[maxn],conn[maxn][maxn];
 void initBF(){
     ;i<=n;i++) G[i].clear();
     memset(v,,sizeof(v));
     edges.clear();
     memset(conn,,sizeof(conn));
     ;i<=n;i++) conn[i][i]=;
 }
 void go(int u){
     v[u]=;
     ;i<G[u].size();i++){
         Edge& e=edges[G[u][i]];
         if(v[e.to]) continue;
         go(e.to);
     }
 }
 void addEdge(int from,int to,int dist){
     edges.push_back((Edge){from,to,dist});
     G[);
     conn[;
 }
 bool BF(int s){
     memset(inq,,sizeof(inq));
     memset(cnt,,sizeof(cnt));
     ;i<=n;i++) d[i]=inf;
     d[s]=;
     inq[s]=;
     queue<int> Q;
     Q.push(s);
     while(!Q.empty()){
         int u=Q.front();Q.pop();
         inq[u]=;
         ;i<G[u].size();i++){
             Edge& e=edges[G[u][i]];
             int go=e.to;
             if(conn[go][n]&&d[go]>d[u]+e.dist){
                 d[go]=d[u]+e.dist;
                 if(!inq[go]){
                     inq[go]=;
                     Q.push(go);
                     if(++cnt[go]>n) return false;
                 }
             }
         }
     }
     ) return false;
     return true;
 }
 bool J(int k){
     ;i<e;i++) edges[i].dist+=k;
     );
     ;i<e;i++) edges[i].dist-=k;
     return res;
 }
 void FLYD(){
     ;k<=n;k++){
         ;i<=n;i++){
             ;j<=n;j++){
                 ;
             }
         }
     }
 }
 int main()
 {
     freopen("tstrip.in","r",stdin);
     freopen("tstrip.std","w",stdout);
     int T;
     scanf("%d",&T);
     while(T--){
         scanf("%d%d",&n,&e);
         initBF();
         ;i<=e;i++){
             int x,y,z;
             scanf("%d%d%d",&x,&y,&z);
             addEdge(x,y,z);
         }
         go();
         if(!v[n]) printf("-1\n");
         else{
             FLYD();
             ,r=;
             while(l<r){
                 ;
                 if(J(m)){
                     r=m;
                 };
             }
             J(l);
             printf("%d\n",d[n]);
         }
     }
     fclose(stdin);
     fclose(stdout);
     ;
 }

NOIP模拟赛-时间与空间之旅的更多相关文章

  1. 2014-10-31 NOIP模拟赛

        10.30 NOIp  模拟赛   时间 空间 测试点 评测方式 挖掘机(dig.*) 1s 256M 10 传统 黑红树(brtree.*) 2s 256M 10 传统 藏宝图(treas. ...

  2. 10.17 NOIP模拟赛

    目录 2018.10.17 NOIP模拟赛 A 咒语curse B 神光light(二分 DP) C 迷宫maze(次短路) 考试代码 B 2018.10.17 NOIP模拟赛 时间:1h15min( ...

  3. 10.16 NOIP模拟赛

    目录 2018.10.16 NOIP模拟赛 A 购物shop B 期望exp(DP 期望 按位计算) C 魔法迷宫maze(状压 暴力) 考试代码 C 2018.10.16 NOIP模拟赛 时间:2h ...

  4. NOIP模拟赛20161022

    NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...

  5. NOIP模拟赛 by hzwer

    2015年10月04日NOIP模拟赛 by hzwer    (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...

  6. CH Round #58 - OrzCC杯noip模拟赛day2

    A:颜色问题 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2358%20-%20OrzCC杯noip模拟赛day2/颜色问题 题解:算一下每个仆人到它的目的地 ...

  7. CH Round #54 - Streaming #5 (NOIP模拟赛Day1)

    A.珠 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2354%20-%20Streaming%20%235%20(NOIP模拟赛Day1)/珠 题解:sb题, ...

  8. 【noip模拟赛5】细菌 状压dp

    [noip模拟赛5]细菌   描述 近期,农场出现了D(1<=D<=15)种细菌.John要从他的 N(1<=N<=1,000)头奶牛中尽可能多地选些产奶.但是如果选中的奶牛携 ...

  9. NOIP模拟赛-2018.11.6

    NOIP模拟赛 今天想着反正高一高二都要考试,那么干脆跟着高二考吧,因为高二的比赛更有技术含量(我自己带的键盘放在这里). 今天考了一套英文题?发现阅读理解还是有一些困难的. T1:有$n$个点,$m ...

随机推荐

  1. struts2 标签 和 c标签的页面数据显示

    用struts2 标签显示的页面代码 <s:if test="#request.employees == null || #request.employees.size() == 0& ...

  2. easyui js基础

    $(document).ready( function(){ initload(); });function initConfig(){ //数据列表 yzfymx=$("#tjdj&quo ...

  3. android sdk 更新用的HOSTS

    74.125.113.121 developer.android.com203.208.46.146 www.google.com 203.208.46.146 dl.google.com 203.2 ...

  4. LPTHW 笨方法学python 18章

    看完18章以后,发现第一个练习中,使用了*args读取全部的的输入参数作为一个元组,但是在他的练习中只给了两个变量去赋值,当用户不清楚这个函数的定义时,就可能会给出过多的变量进这个函数,那么就会出现如 ...

  5. 基于MPI的并行计算—矩阵向量乘

    以前没接触过MPI编程,对并行计算也没什么了解.朋友的期末课程作业让我帮忙写一写,哎,实现结果很一般啊.最终也没完整完成任务,惭愧惭愧. 问题大概是利用MPI完成矩阵和向量相乘.输入:Am×n,Bn× ...

  6. 机器学习(一) 从一个R语言案例学线性回归

    写在前面的话 按照正常的顺序,本文应该先讲一些线性回归的基本概念,比如什么叫线性回归,线性回规的常用解法等.但既然本文名为<从一个R语言案例学会线性回归>,那就更重视如何使用R语言去解决线 ...

  7. 百度翻译&&金山词霸API

    #/usr/bin/env python3 #coding=utf8 """百度翻译api功能实现函数,本模块基于Python3.x实现,getTransResult(q ...

  8. UVA 10474 大理石在哪 lower_bound

    题意:找输入的数在排完序之后的位置. 主要是lower_bound 函数的使用.它的作用是查找大于或者等于x的第一个位置. #include<cstdio> #include<alg ...

  9. [poj 1502]昂贵的聘礼

    一道不算太难的最短路喵~ 容我吐槽一下,酋长的地位居然不是最高的额——那你特么的居然还算是酋长?! 枚举一个地位区间 [i..i+M-1] 只要所有的交易者的地位都在该区间中,那么就不会引起冲突 而这 ...

  10. setsockopt 设置 SO_LINGER 选项

    setsockopt 设置 SO_LINGER 选项 最近和后台的server通信 server发现在读数据的时候  客户端已经关闭连接 ,也就是 没有等服务器读完数据,客户端已经fclose了, 联 ...