修路方案

时间限制: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

求出次小生成树, 判断次小生成树是否等于最小生成树。

次小生成树的求法:http://www.cnblogs.com/hxsyl/p/3290832.html

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <list>
#include <sstream>
#define LL long long
#define INF 0x7fffffff
#define FIN 0x80000000
using namespace std;
const int MM = 2139062143;
int n, m;
int cap[502][502];
int mav[502][502], usd[502][502];
int dis[502], vis[502], par[502];
typedef pair<int, int> Pii;
int prim()
{memset(usd, 0, sizeof(usd));memset(mav, -1, sizeof(mav));memset(dis, 0x7f, sizeof(dis));memset(vis, 0, sizeof(vis));memset(par, -1, sizeof(par));priority_queue<Pii, vector<Pii>, greater<Pii> > pq;pq.push(Pii(0, 1));dis[1] = 0;int res = 0;while(pq.size()){Pii p = pq.top(); pq.pop();int u = p.first;int v = p.second;if(vis[v]) continue;vis[v] = 1;res += u;if(par[v] != -1)  //第一个结点不需要处理usd[par[v]][v] = usd[v][par[v]] = 1;  //标记最小生成树用的边for(int i = 1 ; i <= n ; i++){if(par[v] != -1 && vis[i])mav[v][i] = mav[i][v] = max(u, mav[i][par[v]]); // v 到 i 的路径的最大边权if(!vis[i] && cap[v][i] < MM && dis[i] > cap[v][i]){dis[i] = cap[v][i];par[i] = v;  //父亲结点pq.push(Pii(dis[i], i));}}}return res;
}
//暴力枚举每一条边
int smst(int res)
{int ans = INF;for(int i = 1 ; i <= n ; i++)for(int j = i + 1 ; j <= n ; j++){if(cap[i][j] < MM && usd[i][j] == 0){ans = min(ans, res + cap[i][j] - mav[i][j]);}}return ans;
}
int main()
{int T;scanf("%d", &T);while(T--){scanf("%d %d", &n, &m);//初始化memset(cap, 0x7f, sizeof(cap));for(int i = 0 ; i <= n ; i++)cap[i][i] = 0;//建图int u, v, w;for(int i = 0 ; i < m ; i++){scanf("%d %d %d", &u, &v, &w);if(cap[u][v] > w)cap[u][v] = cap[v][u] = w;}//得到最小生成树的值int res = prim();//判断次小生成树if(res == smst(res)) cout<<"Yes"<<endl;else cout<<"No"<<endl;}
}

NYOJ118 修路方案 次小生成树相关推荐

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

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

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

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

  3. NYOJ-118 修路方案

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

  4. NYOJ118 修路方案

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=118 题目分析: 上次也做了那个最小生成树的题了,但是当时只是看懂了那两个算法,没有深入理 ...

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

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

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

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

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

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

  8. 南阳118--修路方案(次小生成树)

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

  9. NYOJ 118 修路方案

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

最新文章

  1. cli vue 卸载,vue Cli 环境删除与重装教程 - 版本文档
  2. C/C++语言变量声明内存分配
  3. 百度编辑器 Ueditor 如何增加模板 ?
  4. 看老外程序员如何向妻子解释OOD (转载)
  5. solr使用网页浏览器批量导入数据库中数据(本案例是mysql)
  6. cacti yum快速部署
  7. 如何检查CentOS版本– 8种方法
  8. 【路径规划】基于matlab A_star算法机器人静态避障路径规划【含Matlab源码 495期】
  9. Delphi2007的重构功能
  10. inurl faq.php,seo新手工作就是做外链
  11. Win7安装驱动提示“无法验驱动程序数字签名”怎么办?
  12. 软件测试优秀员工发言稿,2018软件测试国赛获奖感言|2018年优秀员工获奖感言
  13. 如何取消360锁定上网主页
  14. 给windows7系统盘瘦身
  15. 有参构造法和无参构造法
  16. 手机python怎么安装turtle_Python3 turtle安装和使用教程
  17. Kubernetes学习之Helm包管理器
  18. Es tut noch weh 双语歌词
  19. 史上最全解析——柯林斯大猫英语分级(附1~11级绘本及音频资源)
  20. 【JAVA基础速过】第2章 Java 基本语法(上):变量

热门文章

  1. 抖音评论功能简单实现 (小程序版)
  2. WebAssembly简介
  3. Hexo写文章基本操作
  4. XP 32位与64位的区别
  5. 【老生谈算法】matlab实现电力系统暂态稳定分析——暂态稳定分析
  6. Delphi 通信报Asynchronous socket error 10053错误的一个解决方法
  7. cobaltstrike的安装与基础使用
  8. linux内核调试指南 1
  9. ubuntu 安装 酷狗在线音乐桌面版
  10. 论文翻译与理解:Hard Positive Generation via Adversary for Object Detection