讨论 / 这题用最小环为什么第8个点会错。 牛来看下。。。 平度一中的"yiyu9261wsx"进来下号么
小牛啃草 2010-11-01 02:40:00
点我顶贴 收藏 删除
program v389;

const x='v389.in';

y='v389.out';

var map:array[1..250,1..250]of longint;

dis:array[1..250,1..250]of longint;

i,j,k,m,n,p,q,r,mi:longint;

function min(x,y:longint):longint;

begin

if x<y

then min:=x

else min:=y;

end;

begin

readln(n,m);

for i:=1 to m do

begin

readln(p,q,r);

map[p,q]:=r;

map[q,p]:=r;

dis[p,q]:=r;

dis[q,p]:=r;

end;

mi:=maxint;

for k:=1 to n do

begin

for i:=1 to k-1 do

for j:=i+1 to k-1 do

if map[i,k]*map[k,j]*dis[i,j]<>0

then mi:=min(mi,map[i,k]+map[k,j]+dis[i,j]);

for i:=1 to n do

for j:=1 to n do

if dis[i,k]*dis[k,j]<>0

then dis[i,j]:=min(dis[i,j],dis[i,k]+dis[k,j]);

end;

if mi<maxint

then writeln(mi)

else writeln('He will never come back.');

end.

状态: Unaccepted

测评机: Xeond[6]

得分: 90分

提交日期: 2010-10-23 1:15:00

有效耗时: 1359毫秒

测试结果1: 通过本测试点|有效耗时156ms

测试结果2: 通过本测试点|有效耗时47ms

测试结果3: 通过本测试点|有效耗时47ms

测试结果4: 通过本测试点|有效耗时156ms

测试结果5: 通过本测试点|有效耗时188ms

测试结果6: 通过本测试点|有效耗时187ms

测试结果7: 通过本测试点|有效耗时172ms

测试结果8: 测试结果错误.错误结果为:139

正确结果应为:122

测试结果9: 通过本测试点|有效耗时188ms

测试结果10: 通过本测试点|有效耗时218ms

yiyu9261wsx我看你当时做的时候开始跟我错的一样的,

不知道你后来是怎么AC的

如果不是加if ans=139 then ans:=122;的话

能不能跟我说下你是怎么改的?

#1 海角@2010-11-01 01:50:00
回复 删除
同感 啊 同志
#2 L.Lawliet@2010-11-01 02:08:00
回复 删除
我用的是dijkstra AC

program heart_dijkstra;

type color=(white,gray,black);

const maxn=250;

var adj:Array[0..maxn,0..maxn]of dword;

path,path2:array[0..maxn]of dword;

f:array[0..maxn]of color;

i,j,k,m,n,w,a,b:integer;

bre:longint;

ans,step:dword;

function dijkstra(st,ed:integer;all:boolean):dword;

var i,j,k:integer;

s,min:dword;

begin

for i:=1 to n do f[i]:=white;

filldword(path,sizeof(path) shr 2,maxlongint-1);

f[st]:=gray;

path[st]:=0;

while true do

begin

k:=0;

min:=maxlongint;

for i:=1 to n do

if (f[i]=gray)and(path[i]<min)then

begin

k:=i;

min:=path[i];

end;

f[k]:=black;

if (k=ed)and(not all) then break;

if k=0 then break;

for i:=1 to n do

begin

if f[i]=black then continue;

s:=path[k]+adj[k,i];

if s<path[i] then

begin

path[i]:=s;

f[i]:=gray;

end;

end;

end;

exit(path[ed]);

end;

{main}

begin

readln(n,m);

ans:=maxlongint;

for i:=1 to n do

for j:=1 to n do

adj[i,j]:=maxint;

for i:=1 to m do

begin

readln(a,b,w);

adj[a,b]:=w;

adj[b,a]:=w;

end;

for i:=1 to n do

begin

dijkstra(i,n,true);

for j:=1 to n do

path2[j]:=path[j];

for j:=1 to n do

begin

if adj[j,i]=maxint then continue;

if path2[j]*2>=ans then continue;

bre:=adj[j,i];

adj[j,i]:=maxint;

adj[i,j]:=maxint;

step:=dijkstra(j,i,false);

adj[j,i]:=bre;

adj[i,j]:=bre;

if step+bre<ans then

ans:=step+bre;

end;

end;

if ans>=maxint then

begin

writeln('He will never come back.');

halt;

end;

writeln(ans);

end.

#3 L.Lawliet@2010-11-01 02:10:00
回复 删除
LZ用的是Floyd计算最小环么?
#4 649273254@2010-11-01 02:29:00
回复 删除
我搜索都过了...
#5 L.Lawliet@2010-11-01 02:40:00
回复 删除
...

LS的很强很暴力

Orz。。

查看更多回复
提交回复