题目传送门(内部题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)的更多相关文章

  1. 「题解」NOIP模拟测试题解乱写II(36)

    毕竟考得太频繁了于是不可能每次考试都写题解.(我解释个什么劲啊又没有人看) 甚至有的题目都没有改掉.跑过来写题解一方面是总结,另一方面也是放松了. NOIP模拟测试36 T1字符 这题我完全懵逼了.就 ...

  2. Android单元测试与模拟测试详解

    测试与基本规范 为什么需要测试? 为了稳定性,能够明确的了解是否正确的完成开发. 更加易于维护,能够在修改代码后保证功能不被破坏. 集成一些工具,规范开发规范,使得代码更加稳定( 如通过 phabri ...

  3. [开源]微信在线信息模拟测试工具(基于Senparc.Weixin.MP开发)

    目前为止似乎还没有看到过Web版的普通消息测试工具(除了官方针对高级接口的),现有的一些桌面版的几个测试工具也都是使用XML直接请求,非常不友好,我们来尝试做一个“面向对象”操作的测试工具. 测试工具 ...

  4. 安装nginx python uwsgi环境 以及模拟测试

    uwsgi帮助文档: http://uwsgi-docs-cn.readthedocs.io/zh_CN/latest/WSGIquickstart.html http://uwsgi-docs.re ...

  5. 利用Python中的mock库对Python代码进行模拟测试

    这篇文章主要介绍了利用Python中的mock库对Python代码进行模拟测试,mock库自从Python3.3依赖成为了Python的内置库,本文也等于介绍了该库的用法,需要的朋友可以参考下     ...

  6. 转 C#实现PID控制的模拟测试和曲线绘图

    C#实现PID控制的模拟测试和曲线绘图   本文分两部分,一部分是讲PID算法的实现,另一部分是讲如何用动态的曲线绘制出PID运算的结果. 首先,PID算法的理论模型请参考自动控制理论,最早出现的是模 ...

  7. Mockito:一个强大的用于Java开发的模拟测试框架

    https://blog.csdn.net/zhoudaxia/article/details/33056093 介绍 本文将介绍模拟测试框架Mockito的一些基础概念, 介绍该框架的优点,讲解应用 ...

  8. NOIP模拟测试1(2017081501)

    好,今天是cgg第一次举行模拟测试,希望各位支持. 时间限制:2小时 题目链接: 题目一:水得都没名字了 题目二:车站 题目三:选数 不要觉得2小时太少,我的题目很良心,都很简单. 答案可以在模拟测试 ...

  9. Mock 模拟测试简介及 Mockito 使用入门

    Mock 是什么mock 测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法.这个虚拟的对象就是mock对象.mock对象就是真实对象在调试期间的代 ...

随机推荐

  1. JS基础_流程控制语句

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. Vue访问权限

    设置权限 <script> export default { created(){ if(this.$store.state.userStore.role !== 'manager'){ ...

  3. Android Jetpack之WorkManager: 观察结果

    在使用WorkManager的时候,有时候需要关注任务执行的结果和状态,可以使用 LiveData<WorkInfo> liveOpStatus = WorkManager.getInst ...

  4. 【2】Zookeeper安装

    一.环境准备 Linux操作系统 Java运行环境(1.6或以上) 服务器列表: 配置主机名映射. vi /etc/hosts ##添加如下内容 168.5.7.75 server1 168.5.7. ...

  5. sql分页查询(2005以后的数据库)和access分页查询

    sql分页查询: select * from ( select ROW_NUMBER() over(order by 排序条件) as rowNumber,* from [表名] where 条件 ) ...

  6. centos 7 源代码 mysql-5.7.2 安装

    CENTOS MYSQL 5.7 下载MySQL 5.7 https://dev.mysql.com/downloads/mysql/5.7.html#downloads cd /usr/local/ ...

  7. EEPROM原理详解

    EEPROM(Electrically Erasable Programmable read only memory)即电可擦可编程只读存储器,是一种掉电后数据不丢失(不挥发)存储芯片. EERPOM ...

  8. A主机ping B主机发生了什么?

    计算机网络面试题:A主机ping B主机发生了什么? 众所周知,ping命令使用的是ICMP协议包,那么A主机ping B主机到底发生了什么呢? 1 ping介绍 ping(Packet Intern ...

  9. K-MEANS算法及sklearn实现

    K-MEANS算法 聚类概念: 1.无监督问题:我们手里没有标签 2.聚类:相似的东西分到一组 3.难点:如何评估,如何调参 4.要得到簇的个数,需要指定K值 5.质心:均值,即向量各维取平均即可 6 ...

  10. Cookie/Session的机制

    Cookie的机制 Cookie是浏览器(User Agent)访问一些网站后,这些网站存放在客户端的一组数据,用于使网站等跟踪用户,实现用户自定义功能. Cookie的Domain和Path属性标识 ...