题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4289

可以把一个点上的边按权值排序,然后边权小的向第一个比它大的连差值的边,边权大的向第一个比它小的连0边;这样能体现出“边权较大的边的边权”。

别忘了每条边还要自己跟自己连自己权值的边,表示不是差值的初始值。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #include<vector>
  6. #include<queue>
  7. #define ll long long
  8. using namespace std;
  9. const int N=1e5+,M=2e5+;
  10. int n,m,hd[M<<],xnt,to[M<<],nxt[M<<],w[M<<];
  11. ll dis[M<<],ans=0x3f3f3f3f3f3f3f3f;//M<<1!v
  12. bool vis[M<<];
  13. struct Node{
  14. int bh,w;Node(int a=,int b=):bh(a),w(b) {}
  15. };
  16. vector<Node>e[N];
  17. priority_queue<pair<ll,int> > q;
  18. bool cmp(Node u,Node v){return u.w<v.w;}
  19. int rdn()
  20. {
  21. int ret=;bool fx=;char ch=getchar();
  22. while(ch>''||ch<''){if(ch=='-')fx=;ch=getchar();}
  23. while(ch>=''&&ch<='') ret=(ret<<)+(ret<<)+ch-'',ch=getchar();
  24. return fx?ret:-ret;
  25. }
  26. void add(int x,int y,int z)
  27. {
  28. to[++xnt]=y;nxt[xnt]=hd[x];hd[x]=xnt;w[xnt]=z;
  29. }
  30. void dj()
  31. {
  32. while(q.size())
  33. {
  34. int k=q.top().second;q.pop();
  35. if(vis[k])continue; vis[k]=;
  36. for(int i=hd[k],v;i;i=nxt[i])
  37. if(dis[v=to[i]]>dis[k]+w[i])
  38. {
  39. dis[v]=dis[k]+w[i];
  40. q.push(make_pair(-dis[v],v));
  41. }
  42. }
  43. }
  44. int main()
  45. {
  46. n=rdn(); m=rdn();
  47. for(int i=,u,v,z;i<=m;i++)
  48. {
  49. u=rdn(); v=rdn(); z=rdn(); add(i,i+m,z); add(i+m,i,z);
  50. e[u].push_back(Node(i,z)); e[v].push_back(Node(i+m,z));
  51. }
  52. for(int i=;i<=n;i++)
  53. {
  54. sort(e[i].begin(),e[i].end(),cmp);
  55. int d=e[i].size();
  56. for(int j=;j<d-;j++)
  57. {
  58. add(e[i][j].bh,e[i][j+].bh,e[i][j+].w-e[i][j].w);
  59. add(e[i][j+].bh,e[i][j].bh,);
  60. }
  61. }
  62. memset(dis,0x3f,sizeof dis);
  63. int d=e[].size();
  64. for(int i=;i<d;i++)
  65. {
  66. dis[e[][i].bh]=e[][i].w;
  67. q.push(make_pair(-e[][i].w,e[][i].bh));
  68. }
  69. dj();
  70. d=e[n].size();
  71. for(int i=;i<d;i++)ans=min(ans,dis[e[n][i].bh]);
  72. printf("%lld\n",ans);
  73. return ;
  74. }

bzoj 4289 PA2012 Tax——构图的更多相关文章

  1. BZOJ.4289.PA2012 Tax(思路 Dijkstra)

    题目链接 \(Description\) 给出一个N个点M条边的无向图,经过一个点的代价是进入和离开这个点的两条边的边权的较大值,求从起点1到点N的最小代价.起点的代价是离开起点的边的边权,终点的代价 ...

  2. BZOJ 4289: PA2012 Tax 差分建图 最短路

    https://www.lydsy.com/JudgeOnline/problem.php?id=4289 https://www.cnblogs.com/clrs97/p/5046933.html  ...

  3. BZOJ 4289: PA2012 Tax(最短路)

    Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 755  Solved: 240[Submit][Status][Discuss] Descriptio ...

  4. bzoj 4289: PA2012 Tax

    Description 给出一个N个点M条边的无向图,经过一个点的代价是进入和离开这个点的两条边的边权的较大值,求从起点1到点N的最小代价.起点的代价是离开起点的边的边权,终点的代价是进入终点的边的边 ...

  5. ●BZOJ 4289 PA2012 Tax

    ●赘述题目 算了,题目没有重复的必要. 注意理解:对答案造成贡献的是每个点,就是了. 举个栗子: 对于如下数据: 2 1 1 2 1 答案是 2: ●题解 方法:建图(难点)+最短路. 先来几个链接: ...

  6. 【刷题】BZOJ 4289 PA2012 Tax

    Description 给出一个N个点M条边的无向图,经过一个点的代价是进入和离开这个点的两条边的边权的较大值,求从起点1到点N的最小代价.起点的代价是离开起点的边的边权,终点的代价是进入终点的边的边 ...

  7. BZOJ 4289: PA2012 Tax Dijkstra + 查分

    Description 给出一个N个点M条边的无向图,经过一个点的代价是进入和离开这个点的两条边的边权的较大值,求从起点1到点N的最小代价.起点的代价是离开起点的边的边权,终点的代价是进入终点的边的边 ...

  8. [BZOJ4289] [PA2012] Tax 解题报告 (最短路+差分建图)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=4289 4289: PA2012 Tax Time Limit: 10 Sec  Memo ...

  9. 「BZOJ 4289」 PA2012 Tax

    「BZOJ 4289」 PA2012 Tax 题目描述 给出一个 \(N\) 个点 \(M\) 条边的无向图,经过一个点的代价是进入和离开这个点的两条边的边权的较大值,求从起点 \(1\) 到点 \( ...

随机推荐

  1. Aws Dynamodb数据导出到S3

    本节将描写叙述怎样从一个或多个DynamoDB的表导出数据到S3的bucket中.在运行导出之前你须要提前创建好S3的bucket. 注意 假设你还没有使用过AWS Data Pipeline,在运行 ...

  2. log4net菜鸟指南二----生成access和txt

    前言 有可能目标计算机缺少某些组件,导致无法生成access文件,或者打不开文件,这时txt文件就可以方便的使用了 一,标准的控制台程序输出日志到access <?xml version=&qu ...

  3. 广告制胜无它,顺应人性尔——leo鉴书63

    近期看了几本怎样写文案的书.对广告有了些兴趣.查了下相关销量排行,位置比較高的是本叫<科学的广告+我的广告生涯>的书,是同一作者(Claude C. Hopkins)两本书的合集.前者是他 ...

  4. 微信自带浏览器被输入法阻挡文本框的 jQuery 解决方法 by FungLeo

    微信自带浏览器被输入法阻挡文本框的 jQuery 解决方法 by FungLeo 前言 做好了项目之后,在各种浏览器里面測试,都没有问题.非常高兴,交付后端使用.然而发如今微信自带浏览器里面,却是出现 ...

  5. VueJS表达式支持:逻辑控制或运算

    HTML <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <titl ...

  6. 储存技术(SLC、MLC、TLC和QLC的NAND闪存技术)和Optane Memory

    1.转载:Optane Memory 2.构成SSD的主要IC有主控芯片和NAND闪存,SLC.MLC和TLC三者都是闪存的类型 需要说明的闪存的寿命指的是写入(擦写)的次数,不是读出的次数,因为读取 ...

  7. javascript 高级编程系列 - 基本数据类型

    javascript中的基本数据类型包括: Undefined, Null, Boolean, Number, String 5种数据类型 1. Undefined 类型 (只有一个值 undefin ...

  8. freescale-sdk linux移植一搭建编译环境脚本host-prepare.sh分析

    接下来使用自己的课外歇息时间,对基于PowerPC架构freescale-sdk,进行linux移植和分析.主要參考官方文档freescale linux sdk START_HERE.html,首先 ...

  9. 关于error:Cannot assign to &#39;self&#39; outside of a method in the init family

    有时候我们重写父类的init方法时不注意将init后面的第一个字母写成了小写.在这种方法里面又调用父类的初始化方法(self = [super init];)时会报错,错误信息例如以下:error:C ...

  10. sublime 快捷键 汇总--长期

    Ctrl+P 输入当前项目中的文件名,快速搜索文件 Ctrl+G 输入数字跳转到该行代码 Ctrl+R 输入关键字,查找文件中的函数名 Ctrl+: 输入关键字,查找文件中的变量名.属性名等 Ctrl ...