题意:判断最短路是否唯一。

思路:先prrim一次求出最短路同时记录最短路加入的边;

然后枚举所求边,将其删除再求n-1次prim,判断再次所求得的最短路与第一次求得的次短路的关系。

代码:

#include<iostream>
#include<cstring>
#include<cstdio>
#define MAXN 5050
#define inf 100000000
using namespace std; struct Edge{
int u,v,w;
}edge[MAXN]; int n,m,mst;
int map[MAXN][MAXN],dis[MAXN],fit[MAXN];
bool unique; void prim()
{
int i,j,now,minn,mine;
int num;int k=0;
unique=true;
for( i=0;i<=n;i++)
{
dis[i]=inf;
}
mst=0;
now=1;
for( i=1;i<n;i++)
{
dis[now]=-1;
mine=inf;
for( j=1;j<=n;j++)
{
if(j!=now&&dis[j]>=0)
{
if(map[now][j]<dis[j])
{
dis[j]=map[now][j];
fit[j]=now;
}
if(dis[j]<mine)
{
mine=dis[j];
minn=j;
}
}
}
if(mine==inf)
{
mst=0;
return ;
}
edge[k].u=minn;
edge[k].v=fit[minn];
edge[k].w=map[minn][fit[minn]];
k++;
now=minn;
mst+=mine;
}
num=k;
for(k=0;k<num;k++)
{
map[edge[k].u][edge[k].v]=inf;
map[edge[k].v][edge[k].u]=inf;
if(i!=0)
{
map[edge[k-1].u][edge[k-1].v] = edge[k-1].w;
map[edge[k-1].v][edge[k-1].u] = edge[k-1].w;
}
for(i = 1; i <= n; i ++)
dis[i] = inf; int mst2=0;
bool flag=true;
now=1;
for(i=1;i<n;i++)
{
dis[now]=-1;
mine=inf;
for(j=1;j<=n;j++)
{
if(j!=now&&dis[j]>=0)
{
if(map[now][j]<dis[j])
{
dis[j]=map[now][j];
}
if(dis[j]<mine)
{
mine=dis[j];
minn=j;
}
}
}
if(mine==inf)
{
flag=false;
break;
}
now=minn;
mst2+=mine;
}
if(flag&&mst2==mst)
{
unique=false;
return ;
}
} } int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
map[i][j]=inf;
}
}
for(int i=0;i<m;i++)
{
int v,w,c;
scanf("%d%d%d",&v,&w,&c);
map[v][w]=c;
map[w][v]=c;
}
prim();
if(!unique)printf("Not Unique!\n");
else printf("%d\n",mst);
}
return 0;
}

poj 1679 Prim判断次短路的更多相关文章

  1. poj 1679 The Unique MST 【次小生成树】【模板】

    题目:poj 1679 The Unique MST 题意:给你一颗树,让你求最小生成树和次小生成树值是否相等. 分析:这个题目关键在于求解次小生成树. 方法是,依次枚举不在最小生成树上的边,然后加入 ...

  2. POJ 3635 - Full Tank? - [最短路变形][手写二叉堆优化Dijkstra][配对堆优化Dijkstra]

    题目链接:http://poj.org/problem?id=3635 题意题解等均参考:POJ 3635 - Full Tank? - [最短路变形][优先队列优化Dijkstra]. 一些口胡: ...

  3. CodeForces - 449B 最短路(迪杰斯特拉+堆优化)判断最短路路径数

    题意: 给出n个点m条公路k条铁路. 接下来m行 u v w      //u->v 距离w 然后k行 v w         //1->v 距离w 如果修建了铁路并不影响两点的最短距离, ...

  4. POJ 3259 Wormholes(最短路,判断有没有负环回路)

    Wormholes Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 24249   Accepted: 8652 Descri ...

  5. POJ 1679 The Unique MST(判断最小生成树是否唯一)

    题目链接: http://poj.org/problem?id=1679 Description Given a connected undirected graph, tell if its min ...

  6. poj 1679 判断MST是不是唯一的 (次小生成树)

    判断MST是不是唯一的 如果是唯一的 就输出最小的权值和 如果不是唯一的 就输出Not Unique! 次小生成树就是第二小生成树  如果次小生成树的权值和MST相等  那么MST就不是唯一的 法一: ...

  7. POJ 1679 The Unique MST 【判断最小生成树是否唯一】

    Description Given a connected undirected graph, tell if its minimum spanning tree is unique.  Defini ...

  8. POJ 1679 The Unique MST (次小生成树 判断最小生成树是否唯一)

    题目链接 Description Given a connected undirected graph, tell if its minimum spanning tree is unique. De ...

  9. POJ 3259 Wormholes【最短路/SPFA判断负环模板】

    农夫约翰在探索他的许多农场,发现了一些惊人的虫洞.虫洞是很奇特的,因为它是一个单向通道,可让你进入虫洞的前达到目的地!他的N(1≤N≤500)个农场被编号为1..N,之间有M(1≤M≤2500)条路径 ...

随机推荐

  1. 表达式求值(二叉树方法/C++语言描述)(二)

    表达式二叉树节点的数据可能是运算数或运算符,可以使用一个联合体进行存储:同时还需要一个变量来指示存储的是运算数还是运算符,可以采用和栈方法求值中一样的枚举类型TokenType: typedef en ...

  2. ThinkPHP5.0相关

    1.tp5的下载安装 使用git克隆下面的仓库地址,这个地址下载的速度比较快,差不多两分钟的时间. 克隆tp5的应用项目: git clone https://github.com/top-think ...

  3. 1.初入GitHub

    进入github官网,点击右上角注册按钮.  填写账号名,邮箱和密码    选择免费的公开仓库,点击完成就提示注册成功了.   ps:付费一般是给企业用户使用的,用来存放一些不公开的代码.所以是付费的 ...

  4. PythonTip--一马当先--bfs

    刚学python,小试牛刀 一马当先 讨论此题 | 解题报告 顶(39) (AC/Submit)Ratio(477|1829)26.08% 踩(1) 描述: 下过象棋的人都知道,马只能走'日'字形(包 ...

  5. Python初学时购物车程序练习实例

    不多说了,直接上代码: #Author:Lancy Wu product_list=[ ('Iphone',5800), ('Mac Pro',9800), ('Bike', 800), ('Watc ...

  6. 175. Combine Two Tables【LeetCode】-LEFT JON 和RIGHT JOIN,两张表关联查询-java -sql入门

    Table: Person +-------------+---------+ | Column Name | Type | +-------------+---------+ | PersonId ...

  7. shader之半兰伯特漫反射

    看很多人实现shader都用插件shader force,那我还学shader干X!!!??? 好了,废话不多说,学习shader去.... 漫反射在shader里算是最基础的知识了.入手shader ...

  8. python学习===实现定时发送,方法一

    #比如每3秒打印一次helloworld:from threading import Timer def printHello(): print "Hello World" t = ...

  9. android学习ViewPager的简单使用

    使用ViewPager需要引入android.support.v4.View.ViewPager这样的jar包,谷歌公司为解决当前版本碎片化的问题,提供的兼容的包.主要目的就是解决向下兼容问题. 1, ...

  10. 【SSH】---【Struts2、Hibernate5、Spring4】【SSH框架整合笔记 】

    一.为什么要使用接口? 三层体系架构上层调用下层的时候最好使用接口,比如action层调用service的时候,private IUserDAO userDAO;这里将属性定义为接口,调用DAO的时候 ...