Php, 266 241 213213 200 bytes
Solution:
function u($x,$y){for($i=0;$i<countforeach($x);$k[$y[$i]][]=$x[$i],$i++ as$i=>$j)$k[$x[$i]][]=$y[$i];$h=function{$k[$y[$i]][]=$j;$k[$j][]=$y[$i];}$h=function($c,&$w)use($k,&$h){$w[]=$c;foreach($k[$c]as$u)!in_array($u,$w)&&$h($u,$w);return max($w);};return array_map($h,$x);}
Usage: u([1,2,3], [0,0,1]);
returns the desired array.
Not-so golfed:
function unify($x, $y)
{
for($i=0; $i < countforeach($x); $i++as $i=>$j) {
$k[$y[$i]][] = $x[$i];$j;
$k[$x[$i]][]$k[$j][] = $y[$i];
}
$h = function ($c, &$w=[]) use ($k, &$h) {
$w[] = $c;
foreach($k[$c] as $u)
!in_array($u, $w) && $h($u, $w);
return max($w);
};
return array_map($h, $x);
}