| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
WA的快疯掉了。。。。。。。。。。。。。。program pku2202;
const inputfilename='';
outputfilename='';
maxn=10000;
maxm=200000;
type tgraph=object
total:longint;
deg :array[1..maxn]of longint;
edge:array[1..maxn]of longint;
data:array[1..maxm]of longint;
next:array[1..maxm]of longint;
procedure addedge(u,v:longint);
end;
var n,m,number,long:longint;
g,ng:tgraph;
belong:array[1..maxn]of longint;
size :array[1..maxn]of boolean;
link :array[1..maxm,1..2]of longint;
visit :array[1..maxm]of boolean;
path :array[1..maxn]of longint;
procedure tgraph.addedge(u,v:longint);
begin
inc(deg[u]);
total:=total+1;
data[total]:=v;
next[total]:=edge[u];
edge[u]:=total;
end;
procedure read_data;
var i,u,v:longint;
begin
assign(input,inputfilename);
reset(input);
readln(n,m);
for i:=1 to m do
begin
read(u,v);
g.addedge(u,v);
g.addedge(v,u);
end;
close(input);
end;
procedure dfs(u:longint);
var i,v:longint;
begin
belong[u]:=number;
i:=g.edge[u];
while i>0 do
begin
v:=g.data[i];
if (g.deg[v]>2) and (belong[v]=0) then
dfs(v);
i:=g.next[i];
end;
end;
procedure noanswer;
begin
assign(output,outputfilename);
rewrite(output);
writeln(-1);
close(output);
halt;
end;
procedure euler(u:longint);
var i,v:longint;
begin
i:=ng.edge[u];
while i>0 do
begin
v:=ng.data[i];
if not visit[i] then
begin
visit[i]:=true;
if odd(i) then visit[i+1]:=true else visit[i-1]:=true;
if not size[u] then
begin
long:=long+1;
path[long]:=link[i][1];
end;
long:=long+1;
path[long]:=link[i][2];
euler(v);
end;
i:=ng.next[i];
end;
end;
procedure proceed;
var u,i,v:longint;
begin
for u:=1 to n do
if belong[u]=0 then
begin
inc(number);
if g.deg[u]=2 then
begin
belong[u]:=number;
size[number]:=true;
end else dfs(u);
end;
for u:=1 to n do
begin
i:=g.edge[u];
while i>0 do
begin
v:=g.data[i];
if belong[u]<belong[v] then
begin
ng.addedge(belong[u],belong[v]);
link[ng.total][1]:=u;link[ng.total][2]:=v;
ng.addedge(belong[v],belong[u]);
link[ng.total][1]:=v;link[ng.total][2]:=u;
end;
i:=g.next[i];
end;
end;
for u:=1 to number do
if odd(ng.deg[u]) then noanswer;
euler(1);
end;
procedure print_answer;
var i:longint;
begin
assign(output,outputfilename);
rewrite(output);
for i:=1 to n-1 do
write(path[i],' ');
writeln(path[n]);
close(output);
end;
begin
read_data;
proceed;
print_answer;
end.
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator