296 PORD_INT *xadj, *adjncy, *vwght, *ncolfactor, *ncolupdate, *parent;
297 PORD_INT *vtx2front, *realroot, *uf_father, *uf_size;
299 PORD_INT nvtx, front, front2, froot,
f,
r, u, v, i, istart, istop;
301
306
307
308
309
313
314
315
316
322
323
324
325
326 for (front = 0; front < nvtx; front++)
327 { parent[front] = -1;
328 u = invp[front];
329 uf_father[front] = front;
330 uf_size[front] = 1;
331 realroot[front] = front;
332 froot = front;
333
334
335 istart = xadj[u];
336 istop = xadj[u+1];
337 for (i = istart; i < istop; i++)
338 { v = adjncy[i];
339 front2 = perm[v];
340 if (front2 < front)
342
343 while (uf_father[
r] !=
r)
347 front2 = uf_father[front2];
349 }
350
352 if ((parent[f] == -1) && (f != front))
354 if (uf_size[froot] < uf_size[
r])
355 { uf_father[froot] =
r;
356 uf_size[
r] += uf_size[froot];
358 }
359 else
360 { uf_father[
r] = froot;
361 uf_size[froot] += uf_size[
r];
362 }
363 realroot[froot] = front;
364 }
365 }
366 }
367 }
368
369
370
371
373
374
375
376
381
382 prevlen = 0;
383 for (front = 0; front < nvtx; front++)
384 { u = invp[front];
385 ncolfactor[front] = vwght[u];
386 ncolupdate[front] = 0;
387 vtx2front[u] = front;
388 len = xnzl[front+1] - xnzl[front];
389 if (prevlen - 1 == len)
390 ncolupdate[front] = ncolupdate[front-1] - vwght[u];
391 else
392 { h = xnzlsub[front] + 1;
393 for (i = 1; i < len; i++)
394 { hsub = nzlsub[h++];
395 v = invp[hsub];
396 ncolupdate[front] += vwght[v];
397 }
398 }
399 prevlen = len;
400 }
401
402
403
404
405 free(css);
406 free(realroot); free(uf_father); free(uf_size);
407 return(T);
408}
css_t * setupCSSFromGraph(graph_t *, PORD_INT *, PORD_INT *)