UVA 10462 Is There A Second Way Left? (次小生成树+kruskal)
2024-08-30 19:56:00
题目大意:
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 ;
}
最新文章
- BPM配置故事之案例12-触发另外流程
- windows下 nvm下载node被墙了解决办法
- NAND flash sub-pages
- jenkins发送带附件(logfile.log和index.html)的邮件配置
- 推荐ubuntu下的画图工具
- pointer-events:none;穿透属性
- [QT]抄—影像显示实验
- ROS程序编辑器
- 地形图比例尺、等高距和DEM分辨率关系
- 根据block取出页号buf_block_get_page_no
- Java基础知识强化之集合框架笔记15:List集合的特点
- PHP 设计模式之适配器模式
- 反序列化 DateTime对象问题
- mysql主从复制的配置总结
- CodeForces 429B Working out 动态规划
- FMS+NGINX打造高带宽利用率的流媒体(音频+视频)环境
- $ Django 调API的几种方式
- zepto.js的touch模块
- 玩转mongodb(七):索引,速度的引领(全文索引、地理空间索引)
- git add -A、git add -u、git add .区别
热门文章
- [WinForm]DataGridView列头右键菜单
- SQLAlchemy的group_by和order_by的区别
- 去哪网实习总结:easyui在JavaWeb中的使用,以datagrid为例(JavaWeb)
- VB6 如何连接MYSQL数据库
- Node.js - 断言
- react-redux 之 provider 和 connect
- poj1161Post Office【经典dp】
- NYOJ 158 省赛来了
- HDU 3469 Catching the Thief (博弈 + DP递推)
- Visual Studio Code Unit Testing