分析
题目中的限制条件可以改写为 Y<=X
如果我们有这些限制 Y<=X和 Z<=Y,那么我们可以得到一个新的限制 Z<=X,并且这可以和原来的限制合并在一起。
我们最终的目标是找到缺失的两个人的限制.
所以我们应该去寻找他两的的限制——也就是求最短路。(差分约束系统)
代码
const
maxe=10000;
maxv=20000;
type
arr=record
x,y,w,next:longint;
end;
var
n,m:longint;
a:array[0..maxv] of arr;
b:array[0..2] of longint;
f:array[0..maxe] of longint;
d:array[0..maxe] of longint;
i,j,k:longint;
s,t:longint;
flag,flaj:boolean;
max:longint;
procedure relax(u,v,w:longint);
begin
if d[u]+w<d[v] then
d[v]:=d[u]+w;
end;
procedure bellman;
var
i,j:integer;
begin
for i:=1 to n do
for j:=1 to m do
with a[j] do relax(x,y,w);
for i:=1 to m do
with a[i] do
if d[x]+w<d[y] then begin
flag:=true;
exit;
end;
flag:=false;
end;
begin
readln(n);
fillchar(a,sizeof(a),0);
fillchar(d,sizeof(d),$7f);
m:=n*(n-1) div 2-1;
max:=d[1];
for j:=1 to m do
begin
with a[j] do
begin
read(x,y);
f[x]:=f[x]+1;
f[y]:=f[y]+1;
w:=w+1;
end;
end;
for i:=1 to n do
if f[i]<>n-1
then begin
b[0]:=b[0]+1;
b[b[0]]:=i;
end;
s:=b[1]; t:=b[2];
flaj:=false;
d[s]:=0;
bellman;
if d[t]<>max then begin
writeln(s,' ',t);
flaj:=true;
end;
fillchar(d,sizeof(d),$7f);
d[t]:=0;
bellman;
if (d[s]<>max) and not flaj
then begin
writeln(t,' ',s);
flaj:=true;
end;
if not flaj
then writeln(s,' ',t);
close(input);
close(output);
end.