题目大意:

  Nasa应邻居们的要求,决定用一个网络把大家链接在一起。给出v个点,e条可行路线,每条路线分别是x连接到y需要花费w。

  1:如果不存在最小生成树,输出“No way”.

  2:如果不存在次小生成树,输出“No second way”.

  3:如果两者都存在,输出次小生成树的长度.

解题思路:

  次小生成数+kruskal模板

 #include <cmath>
#include <queue>
#include <string>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std; const int maxn = ;
const int INF = 0x3f3f3f3f;
const double Exp = 1e-;
struct node
{
int x, y, w; };
bool cmp (node a, node b)
{
return a.w < b.w;
}
node stu[maxn];
int v, e, father[maxn], path[maxn]; void init ()
{
for (int i=; i<=v; i++)
father[i] = i;
} int find (int x)
{
if (father[x] != x)
father[x] = find(father[x]);
return father[x];
}
int kruskal ()
{
int i, j, num = ;
for (i=,j=; i<e; i++)
{
int px = find (stu[i].x);
int py = find (stu[i].y);
if (px != py)
{
num += stu[i].w;
path[j++] = i;
father[px] = py;
}
}
int ans = ;
for (i=; i<=v; i++)
if (father[i] == i)
ans ++;
if (ans == )
return num;
return INF;
}
int smst (int x)
{
int i, num = ;
for (i=; i<e; i++)
{
int px = find(stu[i].x);
int py = find(stu[i].y);
if (px != py && i != x)
{
num += stu[i].w;
father[px] = py;
}
}
int ans = ;
for (i=; i<=v; i++)
if (father[i] == i)
ans ++;
if (ans == )
return num;
return INF;
}
int main ()
{
int t, l = ;
scanf ("%d", &t);
while (t --)
{
scanf ("%d %d", &v, &e);
for (int i=; i<e; i++)
scanf ("%d %d %d", &stu[i].x, &stu[i].y, &stu[i].w);
sort (stu, stu+e, cmp);
int num1 , num2;
num1 = num2 = INF;
init ();
num1 = kruskal();
for (int i=; i<v; i++)
{
init ();
num2 = min (num2, smst(path[i]));
}
if (num1 == INF)
printf ("Case #%d : No way\n", l++);
else if (num2 == INF)
printf ("Case #%d : No second way\n", l++);
else
printf ("Case #%d : %d\n", l++, num2);
}
return ;
}

最新文章

  1. BPM配置故事之案例12-触发另外流程
  2. windows下 nvm下载node被墙了解决办法
  3. NAND flash sub-pages
  4. jenkins发送带附件(logfile.log和index.html)的邮件配置
  5. 推荐ubuntu下的画图工具
  6. pointer-events:none;穿透属性
  7. [QT]抄—影像显示实验
  8. ROS程序编辑器
  9. 地形图比例尺、等高距和DEM分辨率关系
  10. 根据block取出页号buf_block_get_page_no
  11. Java基础知识强化之集合框架笔记15:List集合的特点
  12. PHP 设计模式之适配器模式
  13. 反序列化 DateTime对象问题
  14. mysql主从复制的配置总结
  15. CodeForces 429B Working out 动态规划
  16. FMS+NGINX打造高带宽利用率的流媒体(音频+视频)环境
  17. $ Django 调API的几种方式
  18. zepto.js的touch模块
  19. 玩转mongodb(七):索引,速度的引领(全文索引、地理空间索引)
  20. git add -A、git add -u、git add .区别

热门文章

  1. [WinForm]DataGridView列头右键菜单
  2. SQLAlchemy的group_by和order_by的区别
  3. 去哪网实习总结:easyui在JavaWeb中的使用,以datagrid为例(JavaWeb)
  4. VB6 如何连接MYSQL数据库
  5. Node.js - 断言
  6. react-redux 之 provider 和 connect
  7. poj1161Post Office【经典dp】
  8. NYOJ 158 省赛来了
  9. HDU 3469 Catching the Thief (博弈 + DP递推)
  10. Visual Studio Code Unit Testing