P1967 货车运输
最大生成树+lca+并查集

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<queue>
  4. #include<algorithm>
  5. #include<cmath>
  6. #include<ctime>
  7. #include<set>
  8. #include<map>
  9. #include<stack>
  10. #include<cstring>
  11. #define inf 2147483647
  12. #define For(i,a,b) for(register int i=a;i<=b;i++)
  13. #define p(a) putchar(a)
  14. #define g() getchar()
  15. //by war
  16. //2017.11.8
  17. using namespace std;
  18. int n,m,q;
  19. int x,y,z;
  20. int cnt;
  21. int Min[][];
  22. int f[][];
  23. int d[];
  24. int deep[];
  25.  
  26. struct kru
  27. {
  28. int l,r,v;
  29. bool operator<(const kru&a)const
  30. {
  31. return v>a.v;
  32. }
  33. }E[];
  34.  
  35. struct node
  36. {
  37. int n;
  38. int v;
  39. node *next;
  40. }*e[];
  41.  
  42. inline void in(register int &x)
  43. {
  44. int y=;
  45. char c=g();x=;
  46. while(c<''||c>'')
  47. {
  48. if(c=='-')
  49. y=-;
  50. c=g();
  51. }
  52. while(c<=''&&c>='')x=(x<<)+(x<<)+c-'',c=g();
  53. x*=y;
  54. }
  55. inline void o(register int x)
  56. {
  57. if(x<)
  58. {
  59. p('-');
  60. x=-x;
  61. }
  62. if(x>)o(x/);
  63. p(x%+'');
  64. }
  65.  
  66. inline int find(register int x)
  67. {
  68. if(d[x]==x)return x;
  69. d[x]=find(d[x]);
  70. return d[x];
  71. }
  72.  
  73. inline void push(register int x,register int y,register int v)
  74. {
  75. node *p;
  76. p=new node();
  77. p->n=y;
  78. p->v=v;
  79. if(e[x]==NULL)
  80. e[x]=p;
  81. else
  82. {
  83. p->next=e[x]->next;
  84. e[x]->next=p;
  85. }
  86. }
  87.  
  88. inline void build(register int now)
  89. {
  90. deep[now]=deep[f[now][]]+;
  91. for(register int i=;(<<i)<=n;i++)
  92. {
  93. Min[now][i]=min(Min[now][i-],Min[f[now][i-]][i-]);
  94. f[now][i]=f[f[now][i-]][i-];
  95. }
  96. for(node *i=e[now];i!=NULL;i=i->next)
  97. {
  98. if(i->n!=f[now][])
  99. {
  100. f[i->n][]=now;
  101. Min[i->n][]=i->v;
  102. build(i->n);
  103. }
  104. }
  105. }
  106.  
  107. int query(int x,int y)
  108. {
  109. int MIN=inf;
  110. if(deep[x]<deep[y])
  111. swap(x,y);
  112. int c=deep[x]-deep[y];
  113. for(register int i=;(<<i)<=c;i++)
  114. if((<<i)&c)
  115. {
  116. MIN=min(MIN,Min[x][i]);
  117. x=f[x][i];
  118. }
  119. if(x==y)
  120. return MIN;
  121. c=log2(deep[x]);
  122. for(register int i=c;i>=;i--)
  123. {
  124. if(f[x][i]!=f[y][i])
  125. {
  126. MIN=min(MIN,Min[x][i]);
  127. MIN=min(MIN,Min[y][i]);
  128. x=f[x][i];
  129. y=f[y][i];
  130. }
  131. }
  132. return min(MIN,min(Min[y][],Min[x][]));
  133. }
  134.  
  135. int main()
  136. {
  137. in(n),in(m);
  138. For(i,,n)
  139. d[i]=i;
  140. For(i,,m)
  141. in(E[i].l),in(E[i].r),in(E[i].v);
  142. sort(E+,E+m+);
  143. For(i,,m)
  144. {
  145. if(find(E[i].l)!=find(E[i].r))
  146. {
  147. d[find(E[i].l)]=find(E[i].r);
  148. cnt++;
  149. push(E[i].l,E[i].r,E[i].v);
  150. push(E[i].r,E[i].l,E[i].v);
  151. }
  152. if(cnt==n-)
  153. break;
  154. }
  155. Min[][]=inf;
  156. build();
  157. in(q);
  158. For(i,,q)
  159. {
  160. in(x),in(y);
  161. if(find(x)!=find(y))
  162. o(-),p('\n');
  163. else
  164. o(query(x,y)),p('\n');
  165. }
  166. return ;
  167. }

P1967 货车运输的更多相关文章

  1. 洛谷 P1967 货车运输

    洛谷 P1967 货车运输 题目描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物, 司机们想知道每辆车在 ...

  2. 洛谷P3379lca,HDU2586,洛谷P1967货车运输,倍增lca,树上倍增

    倍增lca板子洛谷P3379 #include<cstdio> struct E { int to,next; }e[]; ],anc[][],log2n,deep[],n,m,s,ne; ...

  3. Luogu P1967 货车运输(Kruskal重构树)

    P1967 货车运输 题面 题目描述 \(A\) 国有 \(n\) 座城市,编号从 \(1\) 到 \(n\) ,城市之间有 \(m\) 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 \ ...

  4. 【杂题总汇】NOIP2013(洛谷P1967) 货车运输

    [洛谷P1967] 货车运输 重做NOIP提高组ing... +传送门-洛谷P1967+ ◇ 题目(copy from 洛谷) 题目描述 A国有n座城市,编号从1到n,城市之间有m条双向道路.每一条道 ...

  5. P1967 货车运输(倍增LCA,生成树)

    题目链接: https://www.luogu.org/problemnew/show/P1967 题目描述 A国有n座城市,编号从 1到n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制, ...

  6. 洛谷 P1967 货车运输 Label: 倍增LCA && 最小瓶颈路

    题目描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情况下,最多 ...

  7. 洛谷 P1967 货车运输(克鲁斯卡尔重构树)

    题目描述 AAA国有nn n座城市,编号从 11 1到n nn,城市之间有 mmm 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 qqq 辆货车在运输货物, 司机们想知道每辆车在不超过车 ...

  8. P1967 货车运输 树链剖分

    题目描述 AA国有nn座城市,编号从 11到nn,城市之间有 mm 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 qq 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情况下,最 ...

  9. 洛谷P1967 货车运输

    题目描述 \(A\)国有\(n\)座城市,编号从\(1\)到\(n\),城市之间有\(m\)条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有\(q\)辆货车在运输货物, 司机们想知道每辆车在 ...

随机推荐

  1. Weblogic12c 单节点安装

    第一节weblogic12c 的安装   WebLogic除了包括WebLogic Server服务器之外,还包括一些围绕WebLogic的产品,习惯上我们说的WebLogic是指WebLogic S ...

  2. Confluence 6 查看内容索引概要

    内容索引,通常也被称为查找索引,这个索引被用来在 Confluence 中支持查找.这个索引同时也被其他的一些功能使用,例如在归档邮件中构建邮件主题,View Space Activity 的特性和将 ...

  3. Ionic3.0 输入状态时隐藏Tabs栏

    刚接触ionic3 不久 ,发现遍地都是坑,昨天遇到一个问题就是当键盘弹起的时候tabs 也被 弹了起来,最初预想是放在tabs 的一个子页面内处理这个问题, Tabs隐藏后,我们发现底部有部分空白, ...

  4. JS实现的ajax和同源策略

    一.回顾jQuery实现的ajax 首先说一下ajax的优缺点 优点: AJAX使用Javascript技术向服务器发送异步请求: AJAX无须刷新整个页面: 因为服务器响应内容不再是整个页面,而是页 ...

  5. LeetCode(102):二叉树的层次遍历

    Medium! 题目描述: 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 ...

  6. poj2942 求v-DCC,二分图判奇环,补图

    /* 给定一张无向图,求有多少点不被任何奇环包含 推论1:如果两个点属于两个不同的v-DCC,则他们不可能在同一个奇环内 推论2:某个v-DCC中有奇环,则这个v-DCC中所有点必定被属于某个奇环 只 ...

  7. git bash here 的 ~/.bashrc 配置文件。和 vue/cli 3. 0 的 .vuerc文件(preset )

    今天就来讲一下git有关的小技巧,.bashrc文件是用户配置文环境变量的文件,每次git bash会首先运行里面的内容 1.自动运行 每次进入git bash都会先读取.bashrc里面的内容,因此 ...

  8. GetSystemInfo()

    关于“GetSystemInfo()”的详细信息,参考:https://msdn.microsoft.com/en-us/library/windows/desktop/ms724381(v=vs.8 ...

  9. 基于“MVC”框架集设计模式,开发用户管理系统!

    MVC----(Model View Controller)设计模型: M:表示业务数据和业务规则.包括DAO(beans).DBHelper(DBHelper),用于封装数据库连接,业务数据库处理. ...

  10. Play框架--初学笔记

    目录结构 web_app 根目录 | sbt SBT Unix 批处理脚本用于启动sbt-launch.jar | sbt.bat SBT Windows 批处理脚本用于启动sbt-launch.ja ...