【普组模拟赛】马语翻译

9 篇文章 0 订阅
2 篇文章 0 订阅

【普组模拟赛】马语翻译

题目:

 随着马场的繁荣,出现了越来越多的新马种。种族之间的沟通不畅严重影响了马场的和谐。这时,科学家发明了马语翻译机器人,正好可以解决这一难题。
          机器人有 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.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值