问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

noip最优贸易用pascal的链式前向星做求代码

发布网友 发布时间:2023-10-18 01:45

我来回答

2个回答

热心网友 时间:2024-12-01 00:03

program cdsfc;
var
i,n,m,ans,xx,yy,mmax,mmin:longint;
x,y,z:array[0..500000] of longint;
a,f,max,min,g:array[0..100000] of longint;
v:array[0..100000] of boolean;
function find(t:longint):longint;
begin
if f[t]<>t then find:=find(f[t])
else find:=t;
f[t]:=find;
end;
procere init;
begin
read(n,m);
for i:=1 to n do read(a[i]);
for i:=1 to n do f[i]:=i;
for i:=1 to m do
begin
read(x[i],y[i],z[i]);
if z[i]=2 then f[find(x[i])]:=find(y[i]);
end;
for i:=1 to n do
begin
max[i]:=a[i];
min[i]:=a[i];
end;
for i:=1 to m do
begin
xx:=find(x[i]);
yy:=find(y[i]);
if a[x[i]]>max[xx] then max[xx]:=a[x[i]];
if a[x[i]]<min[xx] then min[xx]:=a[x[i]];
if a[y[i]]>max[yy] then max[yy]:=a[y[i]];
if a[y[i]]<min[yy] then min[yy]:=a[y[i]];
if z[i]=2 then
begin
if a[x[i]]>max[yy] then max[yy]:=a[x[i]];
if a[x[i]]<min[yy] then min[yy]:=a[x[i]];
if a[y[i]]>max[xx] then max[xx]:=a[y[i]];
if a[y[i]]<min[xx] then min[xx]:=a[y[i]];
end;
x[i]:=xx;
y[i]:=yy;
end;
end;
procere sort(l,r:longint);
var
i,j,ix,iy:longint;
begin
i:=l;
j:=r;
ix:=x[(l+r)shr 1];
repeat
while x[i]<ix do inc(i);
while ix<x[j] do dec(j);
if i<=j then
begin
iy:=x[i];
x[i]:=x[j];
x[j]:=iy;
iy:=y[i];
y[i]:=y[j];
y[j]:=iy;
inc(i);
dec(j);
end;
until i>j;
if l<j then sort(l,j);
if i<r then sort(i,r);
end;
procere dfs1(k:longint);
var
j:longint;
begin
min[k]:=mmin;
if k=n then exit;
if v[k] then exit;
v[k]:=true;
for j:=g[k-1] to g[k]-1 do
begin
if mmin>min[y[j]] then mmin:=min[y[j]];
dfs1(y[j]);
mmin:=min[k];
end;
end;
procere dealmin;
begin
sort(1,m);
for i:=1 to m+1 do
if x[i]<>x[i-1] then g[x[i-1]]:=i;
for i:=1 to n do if g[i]=0 then g[i]:=g[i-1];
g[0]:=1;
mmin:=min[1];
dfs1(1);
end;
procere qsort(l,r:longint);
var
i,j,ix,iy:longint;
begin
i:=l;
j:=r;
ix:=y[(l+r)shr 1];
repeat
while y[i]<ix do inc(i);
while ix<y[j] do dec(j);
if i<=j then
begin
iy:=x[i];
x[i]:=x[j];
x[j]:=iy;
iy:=y[i];
y[i]:=y[j];
y[j]:=iy;
inc(i);
dec(j);
end;
until i>j;
if l<j then qsort(l,j);
if i<r then qsort(i,r);
end;
procere dfs2(k:longint);
var
j:longint;
begin
max[k]:=mmax;
if (max[k]-min[k]>ans) then ans:=max[k]-min[k];
if k=1 then exit;
if v[k] then exit;
v[k]:=true;
for j:=g[k-1] to g[k]-1 do
begin
if mmax<max[x[j]] then mmax:=max[x[j]];
dfs2(x[j]);
mmax:=max[k];
end;
end;
procere dealmax;
begin
qsort(1,m);
fillchar(g,sizeof(g),0);
fillchar(v,sizeof(v),false);
for i:=1 to m+1 do
if y[i]<>y[i-1] then g[y[i-1]]:=i;
for i:=1 to n do if g[i]=0 then g[i]:=g[i-1];
g[0]:=1;
mmax:=max[n];
dfs2(n);
end;
begin
init;
dealmin;
dealmax;
writeln(ans);
end.

热心网友 时间:2024-12-01 00:03

题目呢?
请给出完整描述。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
使命召唤9打不开,每次都出现这个情况,怎么弄啊 使命召唤9无法进入关卡 百度知道百度知道的作用 梦见在水里走什么预兆 梦见光脚走路是什么兆头 西装如何穿搭才有高级感? 西装怎样搭配才能穿出又飒又优雅的气势? 西装如何搭配才能穿出优雅成熟的气质? 我考了两次科目三路考,很不辛没能通过,我想放弃了,纠结?学车很辛苦... 我考过不了科目三 要一个可以将文字转换成声音的软件22 苹果手机怎么换64 手机怎么换 爬山后会晕车 媛福达商城从哪发货 治安协警一个月工资大约多少钱45 华能集团内蒙古公司的待遇情况?做行政管理类的工资一个月能拿到...3 我的被盗了,然后又用手机号重新注册了一个微信,还能找回以前的微 ... 西安市住房公积金怎么提取,都需要什么?113 美国强生防爆膜怎么样20 强生汽车贴膜怎么样,使用感受,性价比如何4 四川格特管业有限公司怎么样? 同一个,为什么他同时有两个独立头像,在不同微信里显示却不一... 酒后这几种行为不算酒驾 帮帮忙, 找个动漫,谢谢, 好看的加分~ 老AMD羿龙955能上GTX960吗,游戏玩孤岛3、刺客信条枭雄、英雄联盟、天... 帮忙翻译(在线等,急!~~~) 用手机注册的微信要换手机号想保留怎么办422 在同一手机上怎么切换另一个465 有一句歌词是“……有首歌这样唱”,这是什么歌啊82 梦见哥哥喜欢一个丑女人 手机中毒了怎么办?177 为什么高学历的也找不到工作2 梦见几个女人爱上我的预兆 怎么才能不让别人看到我的码? 如何隐藏? 小米小钢炮蓝牙音箱和雷柏(Rapoo) A3060 蓝牙4.... 大连各小学初中的家长会时间?急急 媛福达手机软件不能用 qq空间下面的那排字怎样弄到下面去啊? pascal随机函数84 从广州白云机场到那里可以乘坐地铁三号线到番禺市桥 跪求翻译!!!1 就快ACCA考试了。想问问ACCA机考有什么需要注意的。 大学生心理发展中常见的问题有哪些 氰酸钾,氰化钾哪个毒性强,化学式是什么?6 苹果手机刚看一会儿电视很烫,感觉像要爆炸一样,什么原因,好恐...11 手机用不到5分钟的时间就发烫 怎么办1 想问问汽车大概底盘防锈多少钱? 平行志愿专业不服从调剂,退档后还有机会?