博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[PKU1679 The Unique MST]
阅读量:5050 次
发布时间:2019-06-12

本文共 2767 字,大约阅读时间需要 9 分钟。

【题目】:The Unique MST

【来源】:POJ1679

【关键字】:图论 次小生成树

//================================================================================================

【分析】:先构造最小生成树,再在MST中删边,找次小生成树.

【小结】:刘老师的论文

//================================================================================================

【代码】:

ContractedBlock.gif
ExpandedBlockStart.gif
View Code
1 type   2   rec = record   3     x, y, d: longint;   4   end;   5 var   6   t, i, n, m, ans, j: longint;   7   a: array[0..10010] of boolean;   8   e: array[0..10010] of rec;   9   f: array[0..4000] of longint;  10 function get(k: longint):longint;  11 begin  12   if f[k] = k then exit(k);  13   f[k] := get(f[k]);  14   get := f[k];  15 end;  16 procedure qs(l, r: longint);  17 var  18   i, j, mid: longint;  19   t: rec;  20 begin  21   i := l;  22   j := r;  23   mid := e[(l+r) shr 1].d;  24   repeat  25     while e[i].d < mid do inc(i);  26     while e[j].d > mid do dec(j);  27     if i <= j then  28       begin  29         t := e[i];  30         e[i] := e[j];  31         e[j] := t;  32         inc(i);  33         dec(j);  34       end;  35   until i > j;  36   if l < j then qs(l,j);  37   if i < r then qs(i,r);  38 end;  39 function judge:boolean;  40 var  41   p, i, j, x, y, now: longint;  42 begin  43   for j := 1 to m do  44     if not a[j] then  45       begin  46         p := 0;  47         now := 0;  48         for i := 1 to n do f[i] := i;  49         i := 1;  50         while (i <= m) and (p < n-1) do  51           begin  52             x := get(e[i].x);  53             y := get(e[i].y);  54             if (x <> y) and (i <> j) then  55               begin  56                 f[x] := y;  57                 inc(now,e[i].d);  58                 inc(p);  59               end;  60             inc(i);  61           end;  62         if p <> n-1 then now := -1;  63         if now = ans then exit(true);  64       end;  65   exit(false);  66 end;  67 procedure kur;  68 var  69   p, i, x, y: longint;  70 begin  71   p := 0;  72   ans := 0;  73   for i := 1 to n do f[i] := i;  74   for i := 1 to m do a[i] := true;  75   i := 1;  76   while (i <= m) or (p < n-1) do  77     begin  78       x := get(e[i].x);  79       y := get(e[i].y);  80       if x <> y then  81         begin  82           f[x] := y;  83           inc(ans,e[i].d);  84           inc(p);  85           a[i] := false;  86         end;  87       inc(i);  88     end;  89   if p <> n-1 then ans := -1;  90 end;  91 begin  92   readln(t);  93   for j := 1 to t do  94     begin  95       readln(n,m);  96       for i := 1 to m do  97         readln(e[i].x,e[i].y,e[i].d);  98       qs(1,m);  99       kur; 100       if judge then writeln('Not Unique!') else writeln(ans); 101     end; 102 end.

转载于:https://www.cnblogs.com/procedure2012/archive/2011/10/20/2218412.html

你可能感兴趣的文章
利用mysqldump备份mysql
查看>>
Qt中子窗口全屏显示与退出全屏
查看>>
使用brew安装软件
查看>>
[BZOJ1083] [SCOI2005] 繁忙的都市 (kruskal)
查看>>
吴裕雄 python 机器学习——数据预处理嵌入式特征选择
查看>>
Centos6.4安装JDK
查看>>
201521123069 《Java程序设计》 第4周学习总结
查看>>
线性表的顺序存储——线性表的本质和操作
查看>>
【linux】重置fedora root密码
查看>>
用swing做一个简单的正则验证工具
查看>>
百度坐标(BD-09)、国测局坐标(火星坐标,GCJ-02)和WGS-84坐标互转
查看>>
pig自定义UDF
查看>>
输入名字显示其生日,没有则让输入生日,做记录
查看>>
爬虫综合大作业
查看>>
Kubernetes 运维学习笔记
查看>>
并查集 经典 畅通工程
查看>>
Spark MLlib 之 Naive Bayes
查看>>
php修改SESSION的有效生存时间
查看>>
spring security 11种过滤器介绍
查看>>
Hibernate一对多、多对一关联
查看>>