人生第一次AC黑题,我太感动了。

每日一题 day31 打卡

Analysis

先跑遍DJ,求出1到 i的最短路。
得到每个点到 1号点的距离后,从小到大排序一遍,这时便可以枚举每个点到 1号点的距离修筑地下隧道,每次将每个被枚举到的点加入一个集合(实际上可以由边权总和-与该点相连所有没有计入集合的边权总和)。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #include<queue>
  6. #define int long long
  7. #define maxn 200000+10
  8. #define INF 2147483647
  9. using namespace std;
  10. inline int read()
  11. {
  12. int x=;
  13. bool f=;
  14. char c=getchar();
  15. for(; !isdigit(c); c=getchar()) if(c=='-') f=;
  16. for(; isdigit(c); c=getchar()) x=(x<<)+(x<<)+c-'';
  17. if(f) return x;
  18. return -x;
  19. }
  20. inline void write(long long x)
  21. {
  22. if(x<){putchar('-');x=-x;}
  23. if(x>)write(x/);
  24. putchar(x%+'');
  25. }
  26. int n,m,c,max_d=-INF,ans,sum,cnt;
  27. int head[*maxn],book[maxn],vis[maxn];
  28. struct node
  29. {
  30. int u,v,w,nex;
  31. }edge[*maxn];
  32. struct node1
  33. {
  34. int dis,num;
  35. }x[maxn];
  36. inline bool cmp(node1 x,node1 y)
  37. {
  38. return x.dis<y.dis;
  39. }
  40. inline void add(int x,int y,int z)
  41. {
  42. edge[++cnt].u=x;
  43. edge[cnt].v=y;
  44. edge[cnt].w=z;
  45. edge[cnt].nex=head[x];
  46. head[x]=cnt;
  47. }
  48. inline void dijkstra()
  49. {
  50. priority_queue<pair<int,int> > q;
  51. for(int i=;i<=n;i++) x[i].dis=INF;
  52. memset(book,,sizeof(book));
  53. x[].dis=;
  54. q.push(make_pair(,));
  55. while(!q.empty())
  56. {
  57. int from=q.top().second;
  58. q.pop();
  59. if(book[from]) continue;
  60. book[from]=;
  61. for(int i=head[from];i;i=edge[i].nex)
  62. {
  63. int to=edge[i].v,val=edge[i].w;
  64. if(x[to].dis>x[from].dis+val)
  65. {
  66. x[to].dis=x[from].dis+val;
  67. q.push(make_pair(-x[to].dis,to));
  68. }
  69. }
  70. }
  71. }
  72. signed main()
  73. {
  74. n=read();m=read();c=read();
  75. for(int i=;i<=m;i++)
  76. {
  77. int x=read(),y=read(),z=read();
  78. add(x,y,z);
  79. add(y,x,z);
  80. sum+=z;
  81. }
  82. dijkstra();
  83. for(int i=;i<=n;i++) x[i].num=i;
  84. sort(x+,x+n+,cmp);
  85. vis[]=;
  86. int ans=sum;
  87. for(int i=;i<=n;i++)
  88. {
  89. vis[x[i].num]=;
  90. for(int j=head[x[i].num];j;j=edge[j].nex)
  91. if(vis[edge[j].v])
  92. sum-=edge[j].w;
  93. ans=min(ans,sum+x[i].dis*c);
  94. }
  95. write(ans);
  96. return ;
  97. }

请各位大佬斧正(反正我不认识斧正是什么意思)

洛谷 AT2434 JOI 公園 (JOI Park) 题解的更多相关文章

  1. 【AT2434】JOI 公園 (JOI Park) 最短路+贪心

    题解 我的歪解 我首先想的是分治,我想二分肯定不行,因为它是没有单调性的. 我想了一下感觉它的大部分数据应该是有凸性的(例如\(y=x^2\)的函数图像),所以可以三分. 下面是我的三分代码(骗了不少 ...

  2. 洛谷P1484 种树&洛谷P3620 [APIO/CTSC 2007]数据备份 题解(堆+贪心)

    洛谷P1484 种树&洛谷P3620 [APIO/CTSC 2007]数据备份 题解(堆+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/132 ...

  3. 洛谷P3387 【模板】缩点 题解

    背景 今天\(loj\)挂了,于是就有了闲情雅致来刷\(luogu\) 题面 洛谷P3387 [模板]缩点传送门 题意 给定一个\(n\)个点\(m\)条边有向图,每个点有一个权值,求一条路径,使路径 ...

  4. [NOI导刊2010提高&洛谷P1774]最接近神的人 题解(树状数组求逆序对)

    [NOI导刊2010提高&洛谷P1774]最接近神的人 Description 破解了符文之语,小FF开启了通往地下的道路.当他走到最底层时,发现正前方有一扇巨石门,门上雕刻着一幅古代人进行某 ...

  5. [洛谷P1029]最大公约数与最小公倍数问题 题解(辗转相除法求GCD)

    [洛谷P1029]最大公约数与最小公倍数问题 Description 输入二个正整数x0,y0(2<=x0<100000,2<=y0<=1000000),求出满足下列条件的P, ...

  6. BZOJ5288 & 洛谷4436 & LOJ2508:[HNOI/AHOI2018]游戏——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=5288 https://www.luogu.org/problemnew/show/P4436 ht ...

  7. BZOJ4943 & 洛谷3823 & UOJ315:[NOI2017]蚯蚓排队——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=4943 http://uoj.ac/problem/315 https://www.luogu.or ...

  8. BZOJ1229 & 洛谷2917:[USACO2008 NOV]toy 玩具 & 洛谷4480:[BJWC2018]餐巾计划问题——题解

    标题很长emmm…… [USACO2008 NOV]toy 玩具 https://www.luogu.org/problemnew/show/P2917 https://www.lydsy.com/J ...

  9. BZOJ3675 & 洛谷3648 & UOJ104:[Apio2014]序列分割——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=3675 https://www.luogu.org/problemnew/show/P3648 ht ...

随机推荐

  1. vue中$router与$route的区别

    $.router是VueRouter的实例,相当于一个全局的路由器对象.包含很多属性和子对象,例如history对象 $.route表示当前正在跳转的路由对象.可以通过$.route获取到name,p ...

  2. Helm命令帮助参数

    # helm help The Kubernetes package manager To begin working with Helm, run the 'helm init' command: ...

  3. Unity项目 - 坦克大战3D TankBattle

    目录 游戏原型 项目演示 绘图资源 代码实现 技术探讨 参考来源 游戏原型 游戏玩法:在有界的战场上,玩家将驾驶坦克,代表绿色阵营,与你的队友一起击溃红蓝阵营的敌人,在这场三方大战中夺得胜利! 操作指 ...

  4. ubuntu配置Selenium+Chromedriver

    1.下载并安装最新的Google Chrome版本执行如下命令: wget https://dl.google.com/linux/direct/google-chrome-stable_curren ...

  5. Java的集合整理

    1.List和Set都是接口,他们都继承于接口Collection,List是一个有序的可重复的集合,而Set的无序的不可重复的集合.Collection是集合的顶层接口,Collections是一个 ...

  6. 安装Ubuntu18.04系统

    一.安装Ubuntu系统 进入系统安装的第一个界面,开始系统的安装操作.每一步的操作,左下角都会提示操作方式!! 1.选择系统语言-English 2.键盘设置-English 3.选择操作Insta ...

  7. 把时间戳转换为 datatime 格式

    使用time timeStamp = 1381419600 timeArray = time.localtime(timeStamp) otherStyleTime = time.strftime(& ...

  8. Django form表单 组件

    目录 Django form表单 组件 Form 组件介绍 普通方式手写注册功能 使用form组件实现注册功能 Form 常用字段与插件 常用字段(必备) 字段参数(必备) 内置验证(必备) 自定义效 ...

  9. Android数据存储原理分析

    Android上常见的数据存储方式为: SharedPreferences是 Android 中比较常用的存储方法,本篇将从源码角度带大家分析一下Android中常用的轻量级数据存储工具SharedP ...

  10. Spring事务传播机制与隔离机制

    详情查看 https://www.jianshu.com/p/249f2cd42692