修路方案

时间限制:3000 ms  |  内存限制:65535 KB
难度:5
描述

南将军率领着许多部队,它们分别驻扎在N个不同的城市里,这些城市分别编号1~N,由于交通不太便利,南将军准备修路。

现在已经知道哪些城市之间可以修路,如果修路,花费是多少。

现在,军师小工已经找到了一种修路的方案,能够使各个城市都联通起来,而且花费最少。

但是,南将军说,这个修路方案所拼成的图案很不吉利,想让小工计算一下是否存在另外一种方案花费和刚才的方案一样,现在你来帮小工写一个程序算一下吧。

输入
第一行输入一个整数T(1<T<20),表示测试数据的组数
每组测试数据的第一行是两个整数V,E,(3<V<500,10<E<200000)分别表示城市的个数和城市之间路的条数。数据保证所有的城市都有路相连。
随后的E行,每行有三个数字A B L,表示A号城市与B号城市之间修路花费为L。
输出
对于每组测试数据输出Yes或No(如果存在两种以上的最小花费方案则输出Yes,如果最小花费的方案只有一种,则输出No)
样例输入
2
3 3
1 2 1
2 3 2
3 1 3
4 4
1 2 2
2 3 2
3 4 2
4 1 2
样例输出
No
Yes
Prim+次小生成树!
次小生成树的两种算法:算法1、step 1.  先用prim求出最小生成树T.         在prim的同时,用一个矩阵max[u][v] 记录 在T中连结任意两点u,v的唯一的         路中权值最大的那条边的权值. (注意这里).         这是很容易做到的,因为prim是每次增加一个结点s, 而设已经标号了的结点         集合为W, 则W中所有的结点到s的路中的最大权值的边就是当前加入的这条边.         step 1 用时 O(V^2).     step 2.  枚举所有不在T中的边uv, 加入边uv则必然替换权为max[u][v]的边。算法2、先用prim求出最小生成树T。           枚举T中的每一条边,把它删除,求剩下的图的最小生成树。选所有枚举得到的生成树中的最小的那一个。
AC码:
#include<stdio.h>
#include<string.h>
#define INF 99999999
int G[505][505],visit[505],lowcost[505];
int repair[505][505],pre[505],f[505][505];
int main()
{int T,v,e,a,b,cost,MinTree,ans,i,j,k,min;scanf("%d",&T);while(T--){scanf("%d%d",&v,&e);//memset(G,INF,sizeof(G));   // 对矩阵G赋值,只能赋为0或-1,如果赋为INF,提交不成功for(i=0;i<=v;i++){for(j=0;j<=v;j++)G[i][j]=INF;}memset(repair,0,sizeof(repair));for(i=0;i<e;i++){scanf("%d%d%d",&a,&b,&cost);G[a][b]=G[b][a]=cost;// 把该边初始为可修状态repair[a][b]=repair[b][a]=1;  // repair:修}// Prim算法生成最小树memset(visit,0,sizeof(visit));memset(f,0,sizeof(f));for(i=1;i<=v;i++){lowcost[i]=G[1][i];      // 初始化lowcost的值pre[i]=1;                // 辅助数组}visit[1]=1;k=1;MinTree=0;for(i=1;i<=v;i++){min=INF;for(j=1;j<=v;j++){if(!visit[j]&&min>lowcost[j]){min=lowcost[j];k=j;}}if(min==INF)break;repair[pre[k]][k]=repair[k][pre[k]]=0;MinTree+=min;visit[k]=1;for(j=1;j<=v;j++){if(visit[j])f[k][j]=f[j][k]=f[j][pre[k]]>G[pre[k]][k]?f[j][pre[k]]:G[pre[k]][k];if(!visit[j]&&G[k][j]<lowcost[j]){lowcost[j]=G[k][j];pre[j]=k;}}}// 再求次小生成树ans=INF;for(i=1;i<=v;i++){for(j=1;j<=v;j++){if(repair[i][j])ans=ans<(MinTree-f[i][j]+G[i][j])?ans:(MinTree-f[i][j]+G[i][j]);}}if(ans==MinTree)printf("Yes\n");elseprintf("No\n");}return 0;
}

NYOJ 118 修路方案(次小生成树)相关推荐

  1. nyoj 118 修路方案(次小生成树)

    修路方案 时间限制:3000 ms  |  内存限制:65535 KB 难度:5 描述 南将军率领着许多部队,它们分别驻扎在N个不同的城市里,这些城市分别编号1~N,由于交通不太便利,南将军准备修路. ...

  2. nyoj 118 修路方案【次小生成树】

    修路方案 时间限制:3000 ms  |  内存限制:65535 KB 难度:5 描述 南将军率领着许多部队,它们分别驻扎在N个不同的城市里,这些城市分别编号1~N,由于交通不太便利,南将军准备修路. ...

  3. NYOJ 118 修路方案

    修路方案 时间限制:3000 ms  |  内存限制:65535 KB 难度:5 描述 南将军率领着许多部队,它们分别驻扎在N个不同的城市里,这些城市分别编号1~N,由于交通不太便利,南将军准备修路. ...

  4. NYOJ118 修路方案 次小生成树

    修路方案 时间限制:3000 ms  |  内存限制:65535 KB 难度:5 描述 南将军率领着许多部队,它们分别驻扎在N个不同的城市里,这些城市分别编号1~N,由于交通不太便利,南将军准备修路. ...

  5. nyoj 118 修路方案

    修路方案 时间限制:3000 ms  |  内存限制:65535 KB 难度:5 描述 南将军率领着许多部队,它们分别驻扎在N个不同的城市里,这些城市分别编号1~N,由于交通不太便利,南将军准备修路. ...

  6. NYOJ 118 路方案(第二小的跨越)

    修路方案 时间限制:3000 ms  |  内存限制:65535 KB 难度:5 描写叙述 南将军率领着很多部队,它们分别驻扎在N个不同的城市里,这些城市分别编号1~N.因为交通不太便利,南将军准备修 ...

  7. nyoj118 修路方案(求次小生成树)

    题目118 题目信息 运行结果 本题排行 讨论区 修路方案 时间限制:3000 ms  |  内存限制:65535 KB 难度:5 描述 南将军率领着许多部队,它们分别驻扎在N个不同的城市里,这些城市 ...

  8. 修路方案(次小生成树)

    修路方案 时间限制:3000 ms  |  内存限制:65535 KB 难度:5 描述 南将军率领着许多部队,它们分别驻扎在N个不同的城市里,这些城市分别编号1~N,由于交通不太便利,南将军准备修路. ...

  9. NYOJ 118 次小生成树

    1.Question: 描述 南将军率领着许多部队,它们分别驻扎在N个不同的城市里,这些城市分别编号1~N,由于交通不太便利,南将军准备修路. 现在已经知道哪些城市之间可以修路,如果修路,花费是多少. ...

最新文章

  1. java编译错误 程序包javax.servlet不存在javax.servlet.*
  2. 2022年3月14日蓝桥杯基础算法能力测试
  3. Java正则表达式中的反向引用
  4. kaggle共享单车数据分析及预测(随机森林)
  5. udl 连mysql_自己如何正确获取MYSQL的ADO连接字符串
  6. HTML5 小动画例子
  7. 查看linux应用zabbix版本
  8. 接口与interface关键字
  9. Netty4.0学习笔记系列之一:Server与Client的通讯
  10. OpenGL编程指南(原书第8版)环境搭建
  11. 公开课可下载资源汇总
  12. vb mysql登录界面_vb.net 简单上机登陆(面向过程思维)
  13. 初探HazelCast IMDG内存数据网格-简介
  14. android判断音频是否是噪音,声音检测器sound detector(噪音分贝检测)
  15. word 要求五十行 50行
  16. 解读论文EPSILON: An Efficient Planning System for Automated Vehicles in Highly Interactive Environments
  17. 还有猛料?维基解密称只发布了已掌握美中情局文件的1%
  18. 为什么 2 * (i * i) 比 2 * i * i 效率高?
  19. 网易2019年Q3财报净利47.26亿元 从财报看网易的长期主义
  20. 第24课 Altium Designer20(AD20)+VESC6.4实战教程:长走线、元器件散热与GND铺铜的处理(北冥有鱼)

热门文章

  1. 互联网运营人员不得不知的14款工具神器
  2. 神策与CDA,一次不平凡的约会
  3. 区块链开发_以太坊多重签名
  4. 30分钟全面解析-SQL事务+隔离级别+阻塞+死锁
  5. Redisson官方文档 - 目录
  6. win linux 装系统 通过 u盘
  7. linux基本知识2
  8. Exchange 2010通过NAT方式发布到公网
  9. Ubuntu 下 redmine 安装配置
  10. highcharts纵坐标的格式化