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 ...
随机推荐
- Ouath协议
OAuth是一个开放协议,允许用户让第三方应用以安全且标准的方式获取该用户在某一网站.移动或桌面应用上存储的私密的资源(如用户个人信息.照片.视频.联系人列表),而无需将用户名和密码提供给第三方应用. ...
- xUtils3源码分析(一):view的绑定
概述 xUtils3是国人开发的一款功能丰富的Android快速开发框架,值得研究下.zip包下载:[ZIP]xutils主要分以下几个模块 视图绑定模块 网络请求模块 数据库模块 图片加载模块 我们 ...
- dedecms 使noflag参数及其过滤多个属性的修改方法
noflag='h' 是代表不包含头条属性的意思,其中flag就是属性, 自定义属性值:头条[h]推荐[c]图片[p]幻灯[f]滚动[s]跳转[j]图文[a]加粗[b]. noflag过滤多个属性的修 ...
- Oracle 用户(user)和模式(schema)的区别
概述: (一)什么Oracle叫用户(user): A user is a name defined in the database that can connect to and access ob ...
- 【转】 iOS如何实现表格的折叠效果?
原文 : http://blog.csdn.net/youcanping2008/article/details/9202167 一.实现原理:就是在点击表格组头视图的时候,如果该表格视图的组展开了 ...
- Hibernate 一对多双向关联Demo
以Classes[班级]和Student[学生]为例的Demo //Classes.java public class Classes implements Serializable { privat ...
- macbook Android开发环境搭建,真机调试
买了一台MacBook,本以为可以鼓捣一下iOS开发之类的,可惜导师要我做Android开发.无奈开始了在MacBook上开发Android的工作. 从开始配置环境到应用成功在真机上运行,也是曲曲折折 ...
- .NET垃圾回收与内存泄漏
相信大家一定听过,看过甚至遇到过内存泄漏.在 .NET 平台也一定知道有垃圾回收器,它可以让开发人员不必担心内存的释放问题,因为它会自定管理内存.但是在 .NET 平台下进行编程,绝对不会发生内存泄漏 ...
- CSS样式的面向对象思想(一)
今天来谈一谈CSS样式的面向对象写法.顾名思义,面向对象是高级语言具备的特性,主要是为了程序高可复用,解决模块之间的耦合关系,那么像CSS这样的脚本语言是否也可以使用面向对象的思想,来提高代码的可维护 ...
- canvas新属性
lineCap默认值是butt,还有aquare,round 使用:context.lineCap="butt" lineJoin miter是默认 还可以是round,bevel ...