题目链接:点击查看

题目大意:给出一张无向完全图,现在要求删除 k 条边,问删除后的最短路的最大值是多少,k 最大是 5

题目分析:很玄学的一道题,数据范围非常小且时间给了 8 秒,比赛时我直接暴力贪心,每次 tarjan 直接找最短路的必经边然后删除,但过了样例却返回了 WA ,然后就自闭了,看了题解之后真的感觉非常奇妙

读完题后就注意到题目中说了所有的边权均是随机数,题解说因为随机数的期望都是一样的,最短路求出后每次只有一条,且涉及到的边数非常少,其他的反例的几率非常非常小,这样可以对每一层进行爆搜,时间复杂度为 c^k * n^2,c 为最短路的边数

然后实现就好了,注意要用朴素的 n * n 的迪杰斯特拉而不是堆优化的,因为堆优化的时间复杂度为 ( n + m ) * logm ,在这个题中显然不如 n * n 的要表现优秀

至于找最短路上的边,我是参考了 std 记录每个点的前驱来实现的,换句话说每次最短路有且仅有一条(不会证明),当然也可以正反各求一次最短路,然后 n * n 去枚举每条边判断是否位于最短路上,不知道会不会超时

代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
#include<cassert>
#include<bitset>
#include<unordered_map>
using namespace std;typedef long long LL;typedef unsigned long long ull;const int inf=0x3f3f3f3f;const int N=55;int maze[N][N],pre[6][N],d[N],ans,n;bool vis[N];void Dijkstra(int k)
{memset(d,inf,sizeof(int)*(n+5));memset(vis,false,n+5);d[1]=0;for(int i=1;i<n;i++){int mmin=inf,u=-1;for(int j=1;j<=n;j++)if(!vis[j]&&d[j]<mmin){mmin=d[j];u=j;}vis[u]=true;for(int v=1;v<=n;v++)if(d[v]>d[u]+maze[u][v]){d[v]=d[u]+maze[u][v];pre[k][v]=u;}}
}void dfs(int k)
{Dijkstra(k);if(!k){ans=max(ans,d[n]);return;}int pos=n;while(pos!=1){int u=pos,v=pre[k][pos];int temp=maze[u][v];maze[u][v]=maze[v][u]=inf;dfs(k-1);maze[u][v]=maze[v][u]=temp;pos=pre[k][pos];}
}int main()
{
#ifndef ONLINE_JUDGE
//  freopen("data.in.txt","r",stdin);
//  freopen("data.out.txt","w",stdout);
#endif
//  ios::sync_with_stdio(false);int w;cin>>w;while(w--){int k;scanf("%d%d",&n,&k);for(int i=1;i<=n*(n-1)/2;i++){int u,v,w;scanf("%d%d%d",&u,&v,&w);maze[u][v]=maze[v][u]=w;}ans=0;dfs(k);printf("%d\n",ans);}return 0;
}

HDU多校3 - 6797 Tokitsukaze and Rescue(dfs+最短路)相关推荐

  1. 杭电多校3-Hdu6797 Tokitsukaze and Rescue

    HDU多校3 - 6797 Tokitsukaze and Rescue(dfs+最短路) 题目链接:点击跳转 Problem Description Princess CJB has lived a ...

  2. 权值线段树小结(hdu多校,普通平衡树,郁闷的出纳员)

    之前刷了一点主席树的题目,但是没有系统的做过权值线段树的题目.主席树是多根权值线段树的综合.权值线段树可以解决在总区间里求第k大的问题.在普通的线段树里,我们每一个节点维护的是权值大小.但是在权值线段 ...

  3. HDU 多校 6400 Parentheses Matrix(构造)

    HDU 多校 6400 Parentheses Matrix(构造) // Problem: D. Parentheses Matrix // Contest: Codeforces - 2018 C ...

  4. 2018 HDU多校第四场赛后补题

    2018 HDU多校第四场赛后补题 自己学校出的毒瘤场..吃枣药丸 hdu中的题号是6332 - 6343. K. Expression in Memories 题意: 判断一个简化版的算术表达式是否 ...

  5. hdu1242 Rescue DFS(路径探索题)

    hdu1242 Rescue DFS(路径探索题) 这里我定义的路径探索题指 找某路能够到达目的地,每次走都有方向,由于是探索性的走 之后要后退 那些走过的状态都还原掉 地址:http://acm.h ...

  6. HDU多校4 - 6989 Didn‘t I Say to Make My Abilities Average in the Next Life?!(单调栈)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,再给出 mmm 次询问,每次询问给出一个区间 [l,r][l,r][l,r],要求输出区间 [l,r][l,r][l,r] 内 " ...

  7. HDU多校4 - 6992 Lawn of the Dead(线段树+模拟)

    题目链接:点击查看 题目大意:给出一个 n∗mn*mn∗m 的矩阵,有 kkk 个点被 banbanban 掉了,现在从点 (1,1)(1,1)(1,1) 出发,只能向右或向下移动,问可以到达的点有多 ...

  8. HDU多校1 - 6959 zoto(莫队+树状数组/值域分块)

    题目链接:点击查看 题目大意:在二维平面内有 nnn 个点,表示为 (i,f[i])(i,f[i])(i,f[i]),需要回答 mmm 次询问,每次询问会给出一个矩形,问矩形内有多少个不同的 yyy ...

  9. HDU多校3 - 6975 Forgiving Matching(多项式匹配字符串)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的字符串 sss 和一个长度为 mmm 的字符串 ttt.规定 kkk 匹配的意思是,两个长度相同的字符串至多有 kkk 个位置是不同的,特别的, ...

最新文章

  1. python项目了解_神级程序员都是这样来开源 Python 项目!今天算是涨知识了!
  2. 想获得50亿专项激励?关于穿山甲新星助推计划你必须了解的几件事
  3. MyBatis的入门知识
  4. 8.Verilog的for循环语句使用
  5. AMD迎接变革:加速OpenCL的未来
  6. java 线程安全问题_java线程安全问题原因及解决办法
  7. 适合做短视频电商的人群分类
  8. nekohtml 用法
  9. 用Java语言编写ajax设计模式_《松本行弘的程序世界》读书笔记(上)——面向对象、程序块、设计模式、ajax...
  10. matlab中普通电感,matlab电感在哪
  11. Linux内核抢占机制(preempt)
  12. IDR:通过迭代数据细化的自我监督图像去噪
  13. 9 Kong LVS 均衡负载
  14. 网页制作:一个简易美观的登录界面
  15. 搭建短域/短链接跳转平台
  16. NICO EXCHANGE NICO 交易所系統維護公告
  17. presto 剖析详解
  18. Position Calc TdPositionCanClose Error
  19. 2023年中国人民大学信息资源管理学院信息分析考研上岸前辈经验
  20. 【论文阅读】【三维目标检测】Part-A^2Net

热门文章

  1. 使用Docker-数据卷挂载案例2
  2. Nginx负载均衡状态之backup
  3. Java领域的对象如何传输-基于 socket 进行对象传输
  4. 每次请求都要建立连接吗?
  5. 分布式架构的session问题
  6. 分布式文件系统研究-fastDFS安装及配置文件说明
  7. map和reduce
  8. 代理模式 、JDK动态代理、cglib动态代理
  9. mysql存储数据到cephfs_采用cephfs实现Elasticsearch数据持久化
  10. linux centos7使用,linux之centos7防火墙基本使用