K - The Unique MST - poj 1679
#include<algorithm>
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std; const int maxn = ;
const int oo = 0x7fffffff; int G[maxn][maxn], path[maxn][maxn];//path记录两点之间的最大边值
bool use[maxn][maxn];//记录是否是最小生成树上面的边 int Prim(int N)
{
int dist[maxn], vis[maxn]={,}, pre[maxn];
int i, ans = , T = N-; for(i=; i<=N; i++)
{
pre[i] = ;
dist[i] = G[][i];
}
while(T--)
{
int k = , mini = oo; for(i=; i<=N; i++)
{
if(!vis[i] && mini > dist[i])
mini = dist[i], k = i;
}
use[ pre[k] ][k] = use[k][ pre[k] ] = true;
ans += mini; vis[k] = true; for(i=; i<=N; i++)
{
if(vis[i] && k != i)
path[k][i]=path[i][k] = max(path[pre[i]][i], mini);
if(!vis[i] && dist[i] > G[k][i])
dist[i] = G[k][i], pre[i] = k;
}
} return ans;
}
int OK(int N)//判断是否有次小生成树
{
for(int i=; i<=N; i++)
for(int j=i+; j<=N; j++)
{
//如果有边的长度与最小树上的边相等,就说明不唯一了
if(!use[i][j] && path[i][j]==G[i][j])
return ;
} return ;
} int main()
{
int T; scanf("%d", &T); while(T--)
{
int i, j, N, M, u, v, w; scanf("%d%d", &N, &M); for(i=; i<=N; i++)
for(j=; j<=N; j++)
{
G[i][j] = (i == j ? : oo);
path[i][j] = ;
use[i][j] = false;
} while(M--)
{
scanf("%d%d%d", &u, &v, &w);
G[u][v] = G[v][u] = w;
} int ans = Prim(N); if(OK(N) == )
printf("Not Unique!\n");
else
printf("%d\n", ans);
} }
K - The Unique MST - poj 1679的更多相关文章
- (最小生成树 次小生成树)The Unique MST -- POJ -- 1679
链接: http://poj.org/problem?id=1679 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82831#probl ...
- Day5 - G - The Unique MST POJ - 1679
Given a connected undirected graph, tell if its minimum spanning tree is unique. Definition 1 (Spann ...
- The Unique MST POJ - 1679 (次小生成树)
Given a connected undirected graph, tell if its minimum spanning tree is unique. Definition 1 (Spann ...
- The Unique MST POJ - 1679 次小生成树prim
求次小生成树思路: 先把最小生成树求出来 用一个Max[i][j] 数组把 i点到j 点的道路中 权值最大的那个记录下来 used数组记录该条边有没有被最小生成树使用过 把没有使用过的一条边加 ...
- The Unique MST POJ - 1679 最小生成树判重
题意:求一个无向图的最小生成树,如果有多个最优解,输出"Not Unique!" 题解: 考虑kruskal碰到权值相同的边: 假设点3通过边(1,3)连入当前所维护的并查集s. ...
- K - The Unique MST
K - The Unique MST #include<iostream> #include<cstdio> #include<cstring> #include& ...
- K度限制MST poj 1639
/* k度限制MST:有一个点的度<=k的MST poj 1639 要求1号点的度不超过k 求MST 我们先把1号点扔掉 跑MST 假设有sum个连通分支 然后把这sum个分支连到1上 就得到了 ...
- K - The Unique MST (最小生成树的唯一性)
Given a connected undirected graph, tell if its minimum spanning tree is unique. Definition 1 (Spann ...
- poj 1679 The Unique MST
题目连接 http://poj.org/problem?id=1679 The Unique MST Description Given a connected undirected graph, t ...
随机推荐
- JS 改变input 输入框样式
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...
- 条件注释判断浏览器版本<!--[if lt IE 9]>(转载)
<!--[if !IE]><!--> 除IE外都可识别 <!--<![endif]--> <!--[if IE]> 所有的IE可识别 <![ ...
- WPF DataGrid 绑定DataSet数据 自动生成行号
1.绑定数据:dataGrid1.ItemsSource = dataSet.Tables[0].DefaultView; 注意:在创建DataGrid 时可以通过AutoGenerateColumn ...
- Android设备 cocos2dx 骨骼动画注册事件播放音效,退到后台再返回黑屏问题
最近遇到一个cocos2dx 骨骼动画注册事件播放音效,在骨骼动画播放的时候,按HOME键退到桌面,再次打开游戏的时候,会黑屏. 解决办法如下,可能不是太完美,至少解决了大部分问题. 1.在org.c ...
- 创建 序列 存储过程 job
掌握了 oracle中的 dbms_lock 函数,该函数 主要用于暂停执行的程序 1.用意 写job 以10分钟 为单元,前10分钟 从 1到10 插入测试表, 中间10分钟从 11到20插入测试表 ...
- 监听器启动顺序和java常见注解
- 【USACO 2.3.4】货币系统
[描述] 母牛们不但创建了它们自己的政府而且选择了建立了自己的货币系统.由于它们特殊的思考方式,它们对货币的数值感到好奇. 传统地,一个货币系统是由1,5,10,20 或 25,50, 和 100的单 ...
- When Colon Scripting is comming (脚本最佳体验)
当冒号脚本来临-- 脚本最佳体验 冒号指派 说明; 冒号替代等号指派赋值,当命名声明指派时指定.相当于声明当前作用域的一个名字指派. 当对指定对象的属性赋值时候,依旧请使用等号.即不废弃等号赋值功用, ...
- javascript之attribute 和 property
首先看看这两个单词的英文释义(来自有道词典).先是property: property ['prɔpəti] n. 性质,性能:财产:所有权 英英释义: any area set aside for ...
- CentOS6.5安装LAMP环境的前期准备
首先需要按照前一篇<CentOS 6.5下安装MySql 5.7>的安装步骤配置好防火墙.关闭 SELINUX 1.编译安装libxml2注:libxml2是一个xml的c语言版的解析器, ...