zoukankan      html  css  js  c++  java
  • 生产

    【题目描述】

    工厂为了生产一种复杂的产品,给各个生产部门制定了详细的生产计划。那么,就经常会有生产部门要把产品送到另一个生产部门作为原料。这是一个注重产品质量的工厂,所以每当有产品要从A部门运到B部门时,都要先从A部门送到质量检验处,检验合格后再从质量检验处运到B部门。

    有些部门之间有传送带连接,厂长想知道每次将产品从一个部门运送到另一个部门最少需要多长时间。

    【输入格式】

    第一行两个整数n、m,n表示部门数量,m表示传送带数量。出于方便,1号部门是质量检验处。

    接下来m行,每行三个整数u、v、w,表示有一条从u部门到v部门的传送带,传送过去需要w个单位时间。注意传送带是单向的。

    接下来一个整数q,表示有q次运送。

    接下来q行,每行两个数a、b,表示这一次要将产品从a部门运送到b部门。

    【输出格式】

    输出q行,每行一个整数,表示这次运送最少需要的时间。若没有传送方案,输出-1。

    【样例输入】

    5 5

    1 2 3

    1 3 5

    4 1 7

    5 4 1

    5 3 1

    3

    4 2

    5 3

    2 3

    【样例输出】

    10

    13

    -1

    【数据规模与约定】

    30%的数据,n≤100,m≤500,w=1

    60%的数据,n≤100,m≤5000

    另20%的数据,q=1

    100%的数据,2≤n≤3000,m≤100000,2≤a,b≤n,

    q≤100000,1≤u,v≤n,1≤w≤10000

    有些部门之间可能有多条传送带。

    工厂的员工都非常尽职尽责,他们的认真和热情决定了产品的完美,所以不必考虑产品不合格的情况。

    【解题思路】

    其实乍一看这个题并不是什么难题,但是(传说中的转折)他只给了24M内存,根本不够用啊!!!这个时候链表大法就上来了(其实我也不知道我做的是不是链表,总之能用),把边用链表储存,然后以一为起点跑两遍单源最短路,求值就好了

     1 program t3;
     2 var u,u1,v,v1,w,w1,head,head1,next,next1,d,d1:array[1..100000] of longint;
     3     vis,vis1:array[1..100001] of boolean;
     4     n,q,m:Longint;
     5 procedure init;
     6 var i:longint;
     7 begin
     8     read(n,m);
     9     for i:=1 to m do
    10     begin
    11         read(u[i],v[i],w[i]);
    12         next[i]:=head[u[i]];//由边指向边
    13         head[u[i]]:=i;//由点指向边
    14         u1[i]:=v[i];//建一张反图
    15         v1[i]:=u[i];
    16         next1[i]:=head1[u1[i]];
    17         head1[u1[i]]:=i;
    18     end;
    19 end;
    20 
    21 procedure dij;//迪杰斯特拉
    22 var i,min,minn,l,j:longint;
    23 begin
    24     for i:=1 to n do
    25     begin
    26         d1[i]:=1000000;
    27         d[i]:=1000000;
    28     end;
    29     d[1]:=0;
    30 
    31     for j:=1 to n do
    32     begin
    33         min:=1000000;
    34         for i:=1 to n do
    35         if (d[i]<min) and(not vis[i]) then
    36         begin
    37             min:=d[i];
    38             minn:=i;
    39         end;
    40         l:=head[minn];
    41         vis[minn]:=true;
    42         while l<>0 do
    43         begin
    44             if d[v[l]]>min+w[l] then
    45             d[v[l]]:=min+w[l];
    46             l:=next[l];
    47         end;
    48     end;
    49 
    50     d1[1]:=0;
    51 
    52     for j:=1 to n do
    53     begin
    54          min:=1000000;
    55         for i:=1 to n do
    56         if (d1[i]<min) and(not vis1[i]) then
    57         begin
    58             min:=d1[i];
    59             minn:=i;
    60         end;
    61         l:=head1[minn];
    62         vis1[minn]:=true;
    63         while l<>0 do
    64         begin
    65             if d1[v1[l]]>min+w[l] then
    66             d1[v1[l]]:=min+w[l];
    67             l:=next1[l];
    68         end;
    69      end;
    70 end;
    71 
    72 procedure print;
    73 var a,b,i:Longint;
    74 begin
    75     read(q);
    76     for i:=1 to q do
    77     begin
    78         read(a,b);
    79         if d[b]+d1[a]<1000000 then writeln(d[b]+d1[a]) else writeln('-1');
    80     end;
    81 end;
    82 
    83 begin
    84     assign(input,'production.in');
    85   assign(output,'production.out');
    86   reset(input);
    87   rewrite(output);
    88     init;
    89     dij;
    90     print;
    91      close(input);
    92   close(output);
    93 end.
  • 相关阅读:
    django+xadmin在线教育平台慕学网(一)
    django.db.migrations.exceptions.InconsistentMigrationHistory django报错
    mac系统 MySQL 8.0.11版本,安装成功,使用Navicat连接失败
    MySQL-表操作
    MySQL的数据类型
    存储引擎
    库操作
    MySQL学习目录
    初识MySQL数据库
    静态方法和类方法
  • 原文地址:https://www.cnblogs.com/wuminyan/p/4743991.html
Copyright © 2011-2022 走看看