zoukankan      html  css  js  c++  java
  • NOJ 水獭看动漫 2001



    水獭看动漫

    时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte
    总提交 : 91            测试通过 : 27 

    题目描述

    水獭发现为了看更多的集数,几乎每部作品都不能完整的看完,这让她心痒难耐~~于是她与他重新商议,希望能把想看的动漫全部看完,想到他当然不会同意这么“朴素而暴力”的新方案,她提出了“优化”条件——在看完某些前传或者是排序靠前的几集后,后面的内容可以跳着看(因为内容的关联所以可以直接跳过一些部分以缩短时间)。
    假定,直接看某集A和某集B需用时Ca和Cb,但是在看完A后再看B的话,可以缩短时间为Db(保证Db≤Cb),从而总时间缩短了。但是,先看B后看A的话,不能缩短时间。
    现在,给出若干这种联系,请计算出看完所有动漫所需要的最短时间。

    输入

    第一行包含一个正整数Q,表示测试数据组数(1≤Q≤10);
    每组测试数据包含若干行:
    第一行仅有一个正整数N(1≤N≤100),表示有N集动漫;第二行包含N个正整数Ci,表示在没有“前情提要”时,看完第i集需要的时间;
    第三行包含一个正整数M(M≤5000),表示有M个剧情的联系(可以缩短时间);接下来M行,每行三个正整数A,B,D,表示,在已看完A的情况下看B所需时间缩短为D。
    为简化数据,假定所有剧集从1至N连续编号,A和B皆为有效编号,D一定不大于对应该集的C(1≤C,D≤10000),且不存在环!!!

    输出

    每组数据对应一行输出,仅包含一个正整数,表示看完所有动漫所需最小时间。

    样例输入

    1
    3
    4 2 5
    1
    1 2 1

    样例输出

    10


    一直错误的理解,认为A和B的关系应该满足A的位置小于B集,然后多加了一个判断==一直WAWAWA,很无法理解。

    本题中不需要考虑A,B的前后关系,没规定要按照1234这样的集数顺序看,看的集数顺序是自定的,只要满足了它的依赖关系就能减时间。

    实现代码如下:

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    int Q;
    int N,M;
    int b,c,d;
    int main()
    {
       // freopen("data.in","r",stdin);
        scanf("%d",&Q);
        while(Q--)
        {
            scanf("%d",&N);
            int sum=0;
            int *a=new int[N+1];
            for(int i=1;i<=N;i++){
                scanf("%d",&a[i]);
            }
            scanf("%d",&M);
            for(int i=1;i<=M;i++){
                scanf("%d%d%d",&b,&c,&d);
                if(a[c]>d)  a[c]=d;
            }
            for(int i=1;i<=N;i++){
                sum+=a[i];
            }
            printf("%d
    ",sum);
        }
    }

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    关键字--static
    java注解
    服务器、应用服务器、web服务器、容器
    进程和线程
    Tomcat7目录结构详解(非常详细)
    HTML小练习
    HTML学习笔记
    javaoo总结二
    javaoo总结一
    python核心-类-1
  • 原文地址:https://www.cnblogs.com/Tobyuyu/p/4965535.html
Copyright © 2011-2022 走看看