NDK 1331 游览

 

问题描述:

                    

顺利通过了黄药师的考验,下面就可以尽情游览桃花岛了!
你要从桃花岛的西头开始一直玩到东头,然后在东头的码头离开。可是当你游玩了一次后,发现桃花岛的景色实在是非常的美丽!!!于是你还想乘船从桃花岛东头的码头回到西头,再玩一遍,但是桃花岛有个规矩:你可以游览无数遍,但是每次游玩的路线不能完全一样。
我们把桃花岛抽象成了一个图,共n个点代表路的相交处,m条边表示路,边是有向的(只能按照边的方向行走),且可能有连接相同两点的边。输入保证这个图没有环,而且从西头到东头至少存在一条路线。两条路线被认为是不同的当且仅当它们所经过的路不完全相同。
你的任务是:把所有不同的路线游览完一共要花多少时间?

数据输入:

第1行为5个整数:n、m、s、t、t0,分别表示点数,边数,岛西头的编号,岛东头的编号(编号是从1到n)和你乘船从岛东头到西头一次的时间。
以下m行,每行3个整数:x、y、t,表示从点x到点y有一条行走耗时为t的路。
每一行的多个数据之间用一个空格隔开,且:2 <= n <= 10000; 1 <= m <= 50000;t <= 10000;t0 <= 10000  

结果输出:

 假设总耗时为total,则输出total mod 10000的值(total对10000取余)。

样例:

 3 4 1 3 7
1 2 5
2 3 7
2 3 10
1 3 15

 56

核心思想:

拓扑排序

type

 edge=record

  y,next,d:longint;

 end;

var

 a:array[0..50010]of edge;

 first,d,v,w:array[0..10010]of longint;

 q:array[0..1000000]of longint;

 n,m,s,t,t0,tot,sum,ans:longint;

//==============================================

procedure build(x,y,d:longint);

begin

 inc(tot);

 a[tot].y:=y;

 a[tot].d:=d;

 a[tot].next:=first[x];

 first[x]:=tot;

end;

//===========================================

procedure init;

var

 i,x,y,d:longint;

begin

 tot:=0;

 readln(n,m,s,t,t0);

 for i:=1 to m do

  begin

   readln(x,y,d);

   build(x,y,d);

   inc(v[y]);

  end;

 tot:=0;

end;

procedure tp;

var

 head,tail,i:longint;

begin

 fillchar(d,sizeof(d),0);

 fillchar(w,sizeof(w),0);

 fillchar(q,sizeof(q),0);

 head:=1;tail:=1;

 w[s]:=1;q[1]:=s;d[s]:=0;

 while head<=tail do

  begin

   tot:=first[q[head]];

   while tot>0 do

    begin

     dec(v[a[tot].y]);

     d[a[tot].y]:=((d[q[head]]+d[a[tot].y])mod 10000+(a[tot].d*w[q[head]])mod 10000)mod 10000;{<到达该点路程和>}

     w[a[tot].y]:=(w[a[tot].y]+w[q[head]])mod 10000;{<到达该点的方案和>}

     if v[a[tot].y]=0 then

      begin

       inc(tail);

       q[tail]:=a[tot].y;

      end;

     tot:=a[tot].next;

    end;

   inc(head);

  end;

end;

begin

 assign(input,'p1331.in');reset(input);

 assign(output,'p1331.out');rewrite(output);

 init;

 tp;

 writeln((d[t]+(w[t]-1)*t0) mod 10000);

 close(input);close(output); 

end.

你可能感兴趣的:(NDK,搜索,排序算法)