Pagini recente » Cod sursa (job #1872893) | Cod sursa (job #2241552) | Cod sursa (job #2103956) | Cod sursa (job #1574991) | Cod sursa (job #376468)
Cod sursa(job #376468)
/*
* File: main.cpp
* Author: virtualdemon
*
* Created on December 21, 2009, 4:13 PM
*/
#include <fstream>
#include <cstdlib>
#define Nmax 111111
/*
*
*/
using namespace std;
struct vertex
{
int info;
vertex* next;
} **First, **Last;
typedef vertex* list;
inline void push( list& f, int x )
{
list q=new vertex;
q->info=x;
q->next=f;
f=q;
}
bool find( list f1, list f2, int x, int y )
{
for( ; f1->next || f2->next; )
{
if( f1->next )
f1=f1->next;
if( f2->next )
f2=f2->next;
}
return f1 == f2;
}
int main()
{int n, t, i, op, x, y;
ifstream in("disjoint.in");
in>>n>>t;
First=(list*)calloc( n, sizeof(vertex) );
Last=(list*)calloc( n, sizeof(vertex) );
for( i=1; i <= n; ++i ) //init
{
push( First[i], i );
Last[i]=First[i];
}
ofstream out("disjoint.out");
while( t-- )
{
in>>op>>x>>y;
if( 1 == op )
{
if( First[x] == Last[x] ) //we have a single element in the x list
{
Last[x]->next=First[x]->next=First[y];
}
else Last[x]->next=First[y];
Last[x]=Last[y];
First[y]=First[x];
continue;
}
if( x == y || find( First[x], First[y], x, y ) )
out<<"DA\n";
else out<<"NU\n";
}
return 0;
}