【普组模拟赛】马语翻译

来源:互联网 发布:程序员的自我修养 ppt 编辑:程序博客网 时间:2024/05/16 05:58

【普组模拟赛】马语翻译

题目:

 随着马场的繁荣,出现了越来越多的新马种。种族之间的沟通不畅严重影响了马场的和谐。这时,科学家发明了马语翻译机器人,正好可以解决这一难题。
          机器人有 M 种,每种机器人能完成 K 个马种之间的语言翻译。问,利用这些机器人,能否实现 1 种群和 N 种群的马语翻译。 若可以,找到翻译过程至少需要用到多少种语言。


比赛时打了一个FLOYED水分

听说可以打SPFA,但我打了个DP

设f[i]表示从第1种语言翻译到第i种语言最少需要经过多少种语言

一开始f都是maxlongint

f[1]=1

每次去扫一遍每个机器人所能翻译的语言

看那个的f最小

用一个x记录下来

接着其他的全都等于min(f[i],f[x]+1)

不停的尝试更新,直到没有更新为止

输出f[n]


标程(请勿抄袭,后果很严重):

var     f:array[0..100000]of longint;        a:array[1..1000,1..1000]of longint;        n,k,m,i,j,l,s,x:longint;begin        assign(input,'trans.in');        assign(output,'trans.out');        reset(input);        rewrite(output);        readln(n,k,m);        for i:=1 to m do                for j:=1 to k do                        read(a[i,j]);        for i:=2 to n do                f[i]:=maxlongint;        f[1]:=1;        repeat                x:=0;                for i:=1 to m do                begin                        s:=maxlongint;                        for j:=1 to k do                        if f[a[i,j]]<s then s:=f[a[i,j]];                        if s<>maxlongint then                        begin                                for j:=1 to k do                                if f[a[i,j]]>s+1 then                                begin                                        f[a[i,j]]:=s+1;                                        inc(x);                                end;                        end;                end;        until x=0;        if f[n]=maxlongint then writeln(-1)        else         writeln(f[n]);        close(input);        close(output);end.

原创粉丝点击