[CSP-S模拟测试]:那一天她里我而去(堆优化Dijkstra)
题目传送门(内部题3)
输入格式
每个测试点有多组测试数据。
第一行有一个正整数T表示数据组数。
接下来对于每组数据,第一行有两个正整数n,m分别代表图的点数和边数。
接下来有m行,每行三个整数u,v,d表示u,v之间存在一条长度为d的路径。
保证不存在重边,自环。
输出格式
对于每组测试数据,输出题目中所求的最小环的长度。
无解输出-1。
样例
样例输入
2
3 3
1 2 1
2 3 1
3 1 1
4 5
1 2 2
2 3 2
3 4 2
1 4 2
1 3 5
样例输出
3
8
数据范围与提示
$T \leqslant 10$
$d \leqslant {10}^3$
对于30%的数据:
$n \leqslant {10}^3$
$m \leqslant 4 \times {10}^3$
对于另外30%的数据:
$n \leqslant {10}^4$
$m=n$
对于100%的数据:
$n \leqslant {10}^4$
$m \leqslant 4 \times {10}^4$
题解
这道题要求我们找一个包含节点1的最小环,显然直接dfs求会超时,那么我们试图转化问题。
将问题转化成:在与节点1直接项链的节点中找一个点,砍掉它与节点一的连边,然后从这个点沿其他路径跑到节点1,再加上砍掉的这个边的权值,在所有的这些情况中找最小的。
问题就轻松解决了,依次枚举每一个与节点1相连的点即可。
代码时刻
#include<bits/stdc++.h>
using namespace std;
struct rec
{
int nxt;
int to;
int w;
}e[100000];
int n,m;
int head[40001],cnt=1;
int dis[40001];
bool vis[40001];
int ans;
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > >q;
void pre_work()
{
cnt=1;
ans=20020923;
memset(head,0,sizeof(head));
}
void add(int x,int y,int w)
{
e[++cnt].nxt=head[x];
e[cnt].to=y;
e[cnt].w=w;
head[x]=cnt;
}
void Dij(int x)
{
memset(vis,0,sizeof(vis));
memset(dis,0x3f,sizeof(dis));
q.push(make_pair(0,x));
dis[x]=0;
while(!q.empty())
{
int flag=q.top().second;
q.pop();
if(vis[flag])continue;
vis[flag]=1;
for(int i=head[flag];i;i=e[i].nxt)
if(dis[e[i].to]>dis[flag]+e[i].w)
{
dis[e[i].to]=dis[flag]+e[i].w;
q.push(make_pair(dis[e[i].to],e[i].to));
}
}
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
pre_work();
for(int i=1;i<=m;i++)
{
int u,v,d;
scanf("%d%d%d",&u,&v,&d);
add(u,v,d);
add(v,u,d);
}
for(int i=head[1];i;i=e[i].nxt)
{
int flag=e[i].w;
e[i].w=e[i^1].w=20020923;//把这条边赋成极大值就相当于是删掉了这条边
Dij(e[i].to);
ans=min(ans,dis[1]+flag);
e[i].w=e[i^1].w=flag;
}
if(ans==20020923)puts("-1");
else printf("%d\n",ans);
}
return 0;
}
rp++
[CSP-S模拟测试]:那一天她里我而去(堆优化Dijkstra)的更多相关文章
- 「题解」NOIP模拟测试题解乱写II(36)
毕竟考得太频繁了于是不可能每次考试都写题解.(我解释个什么劲啊又没有人看) 甚至有的题目都没有改掉.跑过来写题解一方面是总结,另一方面也是放松了. NOIP模拟测试36 T1字符 这题我完全懵逼了.就 ...
- Android单元测试与模拟测试详解
测试与基本规范 为什么需要测试? 为了稳定性,能够明确的了解是否正确的完成开发. 更加易于维护,能够在修改代码后保证功能不被破坏. 集成一些工具,规范开发规范,使得代码更加稳定( 如通过 phabri ...
- [开源]微信在线信息模拟测试工具(基于Senparc.Weixin.MP开发)
目前为止似乎还没有看到过Web版的普通消息测试工具(除了官方针对高级接口的),现有的一些桌面版的几个测试工具也都是使用XML直接请求,非常不友好,我们来尝试做一个“面向对象”操作的测试工具. 测试工具 ...
- 安装nginx python uwsgi环境 以及模拟测试
uwsgi帮助文档: http://uwsgi-docs-cn.readthedocs.io/zh_CN/latest/WSGIquickstart.html http://uwsgi-docs.re ...
- 利用Python中的mock库对Python代码进行模拟测试
这篇文章主要介绍了利用Python中的mock库对Python代码进行模拟测试,mock库自从Python3.3依赖成为了Python的内置库,本文也等于介绍了该库的用法,需要的朋友可以参考下 ...
- 转 C#实现PID控制的模拟测试和曲线绘图
C#实现PID控制的模拟测试和曲线绘图 本文分两部分,一部分是讲PID算法的实现,另一部分是讲如何用动态的曲线绘制出PID运算的结果. 首先,PID算法的理论模型请参考自动控制理论,最早出现的是模 ...
- Mockito:一个强大的用于Java开发的模拟测试框架
https://blog.csdn.net/zhoudaxia/article/details/33056093 介绍 本文将介绍模拟测试框架Mockito的一些基础概念, 介绍该框架的优点,讲解应用 ...
- NOIP模拟测试1(2017081501)
好,今天是cgg第一次举行模拟测试,希望各位支持. 时间限制:2小时 题目链接: 题目一:水得都没名字了 题目二:车站 题目三:选数 不要觉得2小时太少,我的题目很良心,都很简单. 答案可以在模拟测试 ...
- Mock 模拟测试简介及 Mockito 使用入门
Mock 是什么mock 测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法.这个虚拟的对象就是mock对象.mock对象就是真实对象在调试期间的代 ...
随机推荐
- PHP扩展之 Imagick安装
最近的PHP项目中,需要用到切图和缩图的效果,在本地windows开发环境,安装过程遇到好多问题,在此与大家分享. php官网里,一大群老外也看不懂这玩意怎么装,主要原因在于,php版本庞杂,还有x8 ...
- 如果您的浏览器不支持javascript功能
如果您的浏览器不支持javascript功能或被禁止使用,那么在访问许多网站(包括此网站)时,某些功能将不可用.我们建议您打开javascript功能以获得最佳的浏览效果.以下是打开它的可能原因和方法 ...
- linux 下vim 开发环境配置(通用所有编程语言)
1.下载 http://www.iterm2.com/ 2.oh-my-zsh curl -L https://raw.github.com/robbyrussell/oh-my-zsh/master ...
- java字符常量
在Java程序中经常会遇到类似于"Hello"这样地字符串,那么这种类型的字符串是Java中是如何存储,下面就说明字符串常量在内存中存储方式: Java程序在编译时会将程序中出现的 ...
- mysql的锁机制,以及乐观锁,悲观锁,以及热点账户余额问题
mysql的简单锁机制. myisam 1.只支持表级锁,所以经常更新的表结构不适宜用. 2.select也会产生锁表 innodb 1.支持事务,行级锁,表级锁,执行行级锁的前提是sql语句的索引有 ...
- 重装系统失败后怎么用好系统U盘启动解决?
很多朋友在第一次重装电脑系统时都会出现这样或那样的错误,导致重装系统后进不去系统,非常的被动.那么当我们遇到这种情况该怎么办呢?其实我们可以使用好系统U盘启动来解决重装系统后进不去的问题. 好系统U盘 ...
- Oracle【二维表的维护】
二维表的维护 --添加新的字段:alter table 表名 add 字段名 类型 [一般不加约束条件] ) 原表:新增字段后的表:修改原有的字段:[修改字段类型.修改字段名.删除字段] --修改字段 ...
- 关于MySQL服务无法正常启动问题
使用mysql的时候,突然查看服务列表也找不到mysql服务 解决办法: 一.首先打开CMD,切换到MySql安装目录的MySql Server →bin目录下 运行如下命令(具体试个人安装的MySq ...
- deep_learning_MNIST数据集
Code_link:https://pan.baidu.com/s/1dshQt57196fhh67F8nqWow 本文是为既没有机器学习基础也没了解过TensorFlow的码农.序媛们准备的.如果已 ...
- Linux 命令配置IP
配置静态IP:ip addr add 192.168.18.18/24 dev eth0 启动网卡:ifup eth0/ifup ifcfg-eth0 添加默认网关路由:ip route add de ...