这题算是这场考试里最水的一道题了吧,就是求个最小环,但之前没练过,就在考场上yy出了最短路+次短路的傻逼解法,首先是不会求次短路,其次是这显然不对呀,自己随便想想就可以反驳这种解法。

正解比较神,但是跑n遍dijkstra就完全可以了,具体细节看代码吧。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<algorithm>
  4. #include<cstring>
  5. #include<cmath>
  6. #include<vector>
  7. #include<queue>
  8. using namespace std;
  9. const int N=;
  10. int first[N],to[N*],nex[N*],edge[N*],tot=,d[N],v[N];
  11. void add(int a,int b,int c){
  12. to[++tot]=b,edge[tot]=c,nex[tot]=first[a],first[a]=tot;
  13. }
  14. priority_queue<pair<int ,int > >q;
  15. void dij(int k){
  16. memset(d,0x3f,sizeof(d));
  17. memset(v,,sizeof(v));
  18. q.push(make_pair(,k));
  19. d[k]=;
  20. while(q.size()){
  21. int x=q.top().second;
  22. q.pop();
  23. if(v[x]) continue;
  24. v[x]=;
  25. for(int i=first[x];i;i=nex[i]){
  26. int y=to[i],z=edge[i];
  27. if(d[y]>d[x]+z){
  28. d[y]=d[x]+z;
  29. q.push(make_pair(-d[y],y));
  30. }
  31. }
  32. }
  33. }
  34. void init(){
  35. tot=;
  36. memset(first,,sizeof(first));
  37. memset(nex,,sizeof(nex));
  38. memset(to,,sizeof(to));
  39. }
  40. int main(){
  41. int T;
  42. scanf("%d",&T);
  43. while(T--){
  44. int n,m;
  45. scanf("%d%d",&n,&m);
  46. init();
  47. for(int i=;i<=m;i++){
  48. int x,y,z;
  49. scanf("%d%d%d",&x,&y,&z);
  50. add(x,y,z);
  51. add(y,x,z);
  52. }
  53. int ans=;
  54. for(int i=first[];i;i=nex[i]){
  55. int z=edge[i],y=to[i];
  56. edge[i]=edge[i^]=;
  57. dij();
  58. ans=min(ans,d[y]+z);
  59. edge[i]=edge[i^]=z;
  60. }
  61. if(ans==) {puts("-1");continue;}
  62. printf("%d\n",ans);
  63. }
  64. }

HZOJ 20190719 那一天她离我而去(图论最小环)的更多相关文章

  1. HZOJ 20190719 那一天我们许下约定(dp+组合数)

    这个题目背景真的是让我想起了当年... 不说了,言归正传,这题,一眼看去30分暴力还是很好拿的,但我因为考试时的心态问题没有处理好细节爆了零. 30分暴力的普遍思路的复杂度应该是$O(nmd)$的,但 ...

  2. hzoj 2301(莫比乌斯反演)

    题意 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公 数. 思路: 与先前的那个相比,这次a,c并不一定 ...

  3. 20190719 NOIP模拟测试6 (考后反思)

    总分 130 排名第6 虽然与前几次进步了一些,但总会感觉到不安 因为我只是A掉了第一题,而第一题又是道水题,很显然的DP,我相信大佬们没A掉只是因为一些小问题(也许有大佬不屑于这种题吧,lockey ...

  4. HZOJ 单

    两个子任务真的是坑……考试的时候想到了60分的算法,然而只拿到了20分(各种沙雕错,没救了……). 算法1: 对于测试点1,直接n遍dfs即可求出答案,复杂度O(n^2),然而还是有好多同学跑LCA/ ...

  5. 20191102 「HZOJ NOIP2019 Round #12」20191102模拟

    先开坑. md原题写挂我也真是... 100+20+10 白夜 打表大法吼 显然,不在环上的点对答案的贡献是 \((k-cycle)^{k-1}\) . 打表得到环上的递推式,矩阵一下乘起来就好了. ...

  6. 20191004 「HZOJ NOIP2019 Round #9」20191004模拟

    综述 第一次 rk1 ,激动. 题目是 COCI 18/19 Round #1 的三至五题. 得分 \(100+100+20\) \(\mathrm{cipele}\) 问题描述 HZOJ1313 题 ...

  7. 20191003 「HZOJ NOIP2019 Round #8」20191003模拟

    综述 试题为常州集训2019SCDay2 得分\(100+30(0)+28\) 时之终结 问题描述 HZOJ1310 题解 构造题. 发现部分分有一档是 \(Y\) 是 \(2^x\) ,于是自然想到 ...

  8. 20190922 「HZOJ NOIP2019 Round #7」20190922模拟

    综述 这次是USACO2019JAN Gold的题目. \(\mathrm{Cow Poetry}\) 题解 因为每句诗的长度一定是\(k\),所以自然而然想到背包. 设\(opt[i][j]\)代表 ...

  9. HZOJ 20190819 NOIP模拟26题解

    考试过程: 照例开题,然后觉得三道题都挺难,比昨天难多了(flag×1),T1 dp?T2 数据结构? T3 dp?事实证明我是sb然后决定先搞T2,但是,woc,这题在说什么啊,我怎么看不懂题啊,连 ...

随机推荐

  1. iproute2使用及网络名称空间

    创建一个网络名称空间: 相当于创建一个完全隔离的新网络环境,这个环境包括一个独立的网卡空间,路由表,ARP表,ip地址表,iptables,ebtables,等等.总之,与网络有关的组件都是独立的. ...

  2. pb datawindow 类型

    DataWindow.Processing 判断 DataWindow 对象的类型 可用 DataWindow.Processing 判断 DataWindow 对象的类型,dw的类型如下:     ...

  3. IDEA将项目打包为指定class文件的jar

    转自:https://blog.csdn.net/makang456/article/details/86699375 [背景]     公司最近要和某大公司合作,将本公司的产品提供给其它公司单独部署 ...

  4. 界面(UI)测试基础

    界面测试,在web程序雏形后就持续测试到项目交付. 项目中的界面测试 此刻需要感慨下“产品经理”的重要性:没有产品把关整个项目,做出来的东西只能叫做“程序”而非“产品” 有产品的工作流,测试在界面测试 ...

  5. ASP.NET Core MVC里面Razor如何获取URL参数

    原文:ASP.NET Core MVC里面Razor如何获取URL参数 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https:// ...

  6. git 的用法和命令

    学无止境,精益求精! 十年河东,十年河西,莫欺少年穷! 学历代表你的过去,能力代表你的现在,学习代表你的将来! 很久没写博客了,都是工作太忙闹的,索性今儿转发一篇!省的博客园太冷清了... Git图形 ...

  7. mybatis-plus使用Oracle函数生成主键

    函数的调用方式为: select pkg1.fun1 from dual; mybatis-plus一般会使用的主键生成策略为: @Bean public OracleKeyGenerator ora ...

  8. MySQL的左连接查询,只取出最大的一条数据

    今天有个需求,是通过两张表进行查询.一对多的关系.通过一个主键,取出其中的一条.开始以为还好,直接用用了left join on进行查询.却发现了问题所在.其他的好弄.开始的写法借鉴这篇博客:http ...

  9. 使用dockerfile构建nginx镜像 转

      docker构建镜像的方法:   commit.dockerfile 1.使用commit来构建镜像: commit是基于原有镜像基础上构建的镜像,使用此方法构建镜像的目的:保存镜像里的一些配置信 ...

  10. SQL语句复习【专题一】

    SQL语句复习[专题一] --创建用户 scott 并设置密码为 tiger create user scott identified by tiger --用户刚刚创建没有任何的权限,连登录的权限都 ...