ENG  RUSTimus Online Judge
Online Judge
Problems
Authors
Online contests
About Online Judge
Frequently asked questions
Site news
Webboard
Links
Problem set
Submit solution
Judge status
Guide
Register
Update your info
Authors ranklist
Current contest
Scheduled contests
Past contests
Rules
back to board

Discussion of Problem 1320. Graph Decomposition

Pages: Previous 1 2
And how to do it in C++? Is there a function like 'seekeof'?
Posted by Grigor Gevorgian 13 Jun 2008 14:07
WA#6 too(((
Posted by Rustam 8 Sep 2008 22:32
{$A8,B-,C+,D+,E-,F-,G+,H+,I+,J-,K-,L+,M-,N+,O-,P+,Q-,R-,S-,T-,U-,V+,W-,X+,Y+,Z1}
program z1320;

{$APPTYPE CONSOLE}

uses
  SysUtils;
type
  pnode = ^tnode;
  tnode = record
    b:longint;
    next:pnode;
  end;
var a:array [1..1000] of pnode;
    c:array [1..1000] of longint;
    b:array [1..1000] of boolean;
    n,m,i,j,k,t:longint;
    x:pnode;
procedure init;
begin
  reset(input,'input.txt');
  rewrite(output,'output.txt');
end;
procedure print;
begin
  close(input);
  close(Output);
  halt(0);
end;
procedure swap(var a,b:longint);
var t:longint;
begin
 t:=a;
 a:=b;
 b:=t;
end;
procedure dfs(k:longint);
begin
  b[k]:=true;
  inc(c[m]);
  while a[k]<>nil do
    begin
     if b[a[k]^.b]=false then
      dfs(a[k]^.b);
     a[k]:= a[k]^.next;
    end;
end;
begin
  init;
  n:=0;
  while not seekeof(input) do
   begin
     read(i,j);
     new(x);
     x^.b:=j;
     x^.next:=a[i];
     a[i]:=x;
     new(x);
     x^.b:=i;
     x^.next:=a[j];
     a[j]:=x;
     if i<j then swap(i,j);
     if i>n then n:=i;
   end;
  m:=0;
  for i:=1 to n do
    if b[i]=false then
      begin
       inc(m);
       dfs(i);
      end;
  for i:=1 to m do
   if c[i]=2 then
    begin
     write(0);
     halt(0);
    end;
  write(1);
  print;
end.
Re: WA#6 too(((
Posted by Artem Ladik 13 Sep 2008 01:26
type int=integer;

var n,i,j,col:int;
    g:array[1..1000,1..1000] of byte;
    vid:array[1..1000] of boolean;
    v:array[1..1000] of int;

    procedure dsd(curr,p:int);
    var j:int;
    begin
     for j:=1 to n do
      if (g[curr,v[j]]=1) and (not vid[v[j]]) and (j<>p) then
       begin
        inc(col);
        vid[v[j]]:=true;
        dsd(v[j],curr);
       end;
    end;

begin
n:=0;
 while not EOF do
  begin
   readln(i,j);
   g[i,j]:=1;
   g[j,i]:=1;
    if not vid[i] then begin inc(n);v[n]:=i;vid[i]:=true;end;
    if not vid[j] then begin inc(n);v[n]:=j;vid[j]:=true;end;
  end;

fillchar(vid,sizeof(vid),false);

  for i:=1 to n do
   if not vid[v[i]] then
    begin
     col:=0;
      vid[v[i]]:=true;
       dsd(v[i],0);
     if col<2 then begin write(0);halt;end;
    end;
 write(1);
end.
Pages: Previous 1 2