当前位置: 首页 > news >正文

poj 1679 Prim判断次短路

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

思路:先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;
}


 

转载于:https://www.cnblogs.com/amourjun/p/5134130.html

相关文章:

  • 往篇博文更新日志
  • Selenium的 WebDriverWait 研究
  • 笔记本出厂预装Win8改装Win7的操作步骤及常见问题
  • 常用网站推荐
  • what's the help of unnecessary pointer comparison
  • JS函数中使用this的错误
  • PingingLab传世经典系列《CCNA完全配置宝典》-5.2 编号拓展ACL
  • JQuery实现超链接鼠标提示效果
  • 获取设备的高度
  • 查看linux系统运行平台
  • springmvc mybatis 基于全注解事务配置注意事项
  • [HDU]2161Primes
  • hdu 4576(概率dp+滚动数组)
  • UVa 714 - Copying Books
  • HDU1712 ACboy needs your help
  • [Vue CLI 3] 配置解析之 css.extract
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • AWS实战 - 利用IAM对S3做访问控制
  • chrome扩展demo1-小时钟
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • JavaScript 奇技淫巧
  • LeetCode18.四数之和 JavaScript
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • SQLServer之创建显式事务
  • Vue2.0 实现互斥
  • 爱情 北京女病人
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 关于for循环的简单归纳
  • 关于springcloud Gateway中的限流
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 力扣(LeetCode)56
  • 你不可错过的前端面试题(一)
  • 爬虫模拟登陆 SegmentFault
  • 前端
  • 前端js -- this指向总结。
  • 如何优雅地使用 Sublime Text
  • 删除表内多余的重复数据
  • 算法---两个栈实现一个队列
  • 阿里云服务器如何修改远程端口?
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (ZT)出版业改革:该死的死,该生的生
  • (二)Linux——Linux常用指令
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • (转)winform之ListView
  • (轉貼) UML中文FAQ (OO) (UML)
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .NET Core 成都线下面基会拉开序幕
  • .net 发送邮件
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布