bzoj4144 [AMPPZ2014]Petrol 图论 最短路 并查集

bzoj4144 [AMPPZ2014]Petrol
图论 最短路 并查集

1、这道题我们主要就是要求出距离一个油站的最近的油站
首先我们dijkstra 求出任意一个点到 离他最近的油站的距离
2、然后会发现 如果一条边的两个端点 的最近油站不同的话
那么这条边就会在这两个油站的最短路上
3、然后对于每一条边 我们将他的权值 变为
dis[ u ] + dis[ v ] + e[ i ][ j ]
如果u与v最近油站相同 那么这个无意义
如果不同 那么久表示 u 最近油站 到 v 最近油站的最近距离
4、然后我们就 排下序
离线做 取出 满足 最多加油的边 并查集 维护一下连通性就行了

 

 

  1 #include <bits/stdc++.h> 
  2 using namespace std ; 
  3 
  4 const int N = 200011,inf = 1e9 ; 
  5 struct edge{
  6     int to,pre,val ; 
  7 }e[N*2];
  8 struct ek{
  9     int x,y,dis ; 
 10 }te[N];
 11 int vis[N],head[N],dis[N],c[N],ans[N],fa[N],rank[N] ; 
 12 int n,m,Q,s,cnt,now ; 
 13 
 14 struct node{
 15     int val,pos ; 
 16 }p ;
 17 struct cmp{
 18     bool operator() (node a,node b ) 
 19     {
 20         return a.val > b.val ; 
 21     }
 22 }; 
 23 struct qu{
 24     int s,t,b,id ; 
 25 }q[N] ;
 26 
 27 inline int read() 
 28 {
 29     int x = 0 , f = 1 ; 
 30     char ch = getchar() ; 
 31     while(ch<'0'||ch>'9') { if(ch=='-') f = -1 ; ch = getchar() ; } 
 32     while(ch>='0'&&ch<='9') { x = x * 10+ch-48 ; ch = getchar() ; } 
 33     return x * f ; 
 34 }
 35 
 36 inline void add(int x,int y,int v) 
 37 { 
 38     e[++cnt].to = y ;  
 39     e[cnt].pre = head[x] ; 
 40     e[cnt].val = v ; 
 41     head[ x ] = cnt ; 
 42 }
 43 
 44 inline void dij() 
 45 {
 46     priority_queue <node,vector<node>,cmp> Q ; 
 47     for(int i=1;i<=n;i++) vis[ i ] = 0 ,dis[ i ] = inf ; 
 48     int u,v ;  
 49     for(int i=1;i<=s;i++) 
 50     {
 51         p.val = 0 ; p.pos = c[ i ] ; 
 52         Q.push(p) ; dis[ c[ i ] ] = 0 ; 
 53      } 
 54     while(!Q.empty()) 
 55     {
 56         u = Q.top().pos ; 
 57         Q.pop() ; 
 58         if( vis[ u ] ) continue ;  
 59         vis[ u ] = 1 ; 
 60         for(int i=head[u];i;i=e[i].pre) 
 61         {
 62             v = e[ i ].to ; 
 63             if( dis[ u ] + e[ i ].val < dis[ v ] ) 
 64             {
 65                 dis[ v ] = dis[ u ] + e[ i ].val ; 
 66                 p.pos = v ; p.val = dis[ v ] ; 
 67                 Q.push( p ) ;  
 68             }
 69         }
 70     }    
 71 }
 72 
 73 inline bool cmp1(ek a,ek b) { return a.dis < b.dis ; } 
 74 inline bool cmp2(qu a,qu b) { return a.b < b.b ; } 
 75 
 76 inline int find(int x) 
 77 {
 78     if(x==fa[x]) return x ; 
 79     return fa[ x ] = find(fa[x]) ; 
 80 }
 81 
 82 inline void Union(int x,int y) 
 83 {
 84     x = find(x) ; y = find(y) ; 
 85     if(x==y) return ; 
 86     if(rank[ x ] > rank[ y ]) swap(x,y) ; 
 87     fa[ x ] = y ; 
 88     rank[y]+= rank[x]==rank[y] ; 
 89 }
 90 
 91 int main() 
 92 {
 93     n = read() ; s = read() ; m = read() ; 
 94     for(int i=1;i<=s;i++) c[ i ] = read() ; 
 95     int x,y,v ; 
 96     for(int i=1;i<=m;i++) 
 97     {
 98         x = read() ; y = read() ; v = read() ; 
 99         te[ i ] = (ek){ x,y,v } ; 
100         add(x,y,v) ; 
101         add(y,x,v) ; 
102     }
103     dij() ; 
104     for(int i=1;i<=m;i++) 
105         te[ i ].dis = dis[ te[ i ].x ] + dis[ te[ i ].y ] + te[ i ].dis; 
106     Q = read() ;  
107     for(int i=1;i<=Q;i++) 
108         q[ i ].s = read() ,q[ i ].t = read() ,q[ i ].b = read(),q[ i ].id = i ; 
109         
110     for(int i=1;i<=n;i++) 
111         fa[ i ] = i ,rank[ i ] = 0 ; 
112     sort( te+1,te+m+1,cmp1 ) ; 
113     sort( q+1,q+Q+1,cmp2 ) ; 
114     now = 1 ; 
115     for(int i=1;i<=Q;i++) 
116     {
117         while(now<=m&&te[ now ].dis <= q[ i ].b) 
118         {
119             Union( te[ now ].x,te[ now ].y ) ; 
120             now++ ; 
121         }    
122         ans[ q[ i ].id ] = find( q[ i ].s ) == find(q[ i ].t) ; 
123     }
124     for(int i=1;i<=Q;i++) 
125         puts(ans[ i ] ? "TAK" : "NIE" ) ; 
126      return 0 ; 
127 }

 

转载于:https://www.cnblogs.com/third2333/p/7149250.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/258040.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python函数理解,python对函数的理解

函数函数可以提高编写代码效率、代码的重用、让程序更小、模块化可以将一段独立功能的代码集成在一个块中、封装独立功能# 函数定义(参数名为形式参数)def 函数名(参数名):函数体# 调用函数(享受封装的成功)函数名(实际参数)例&#xff1a;print函数print(sep,end) sep(元素中分…

06:空格分隔输出

描述 读入一个字符&#xff0c;一个整数&#xff0c;一个单精度浮点数&#xff0c;一个双精度浮点数&#xff0c;然后按顺序输出它们&#xff0c;并且要求在他们之间用一个空格分隔。输出浮点数时保留6位小数。 输入共有四行&#xff1a;第一行是一个字符&#xff1b;第二行是一…

iOS开发UI篇—九宫格坐标计算

iOS开发UI篇—九宫格坐标计算 一、要求 完成下面的布局 二、分析 寻找左边的规律&#xff0c;每一个uiview的x坐标和y坐标。 三、实现思路 (1)明确每一块用得是什么view (2)明确每个view之间的父子关系&#xff0c;每个视图都只有一个父视图&#xff0c;拥有很多的子视图。 (3)…

工业4.0时代企业如何用CRM实现模式变革

当前&#xff0c;全球经济正处于变革的巨大浪潮之中&#xff0c;对于制造业来说&#xff0c;德国提出工业4.0&#xff0c;美国提出工业互联网&#xff0c;而我国&#xff0c;正在大力推进“中国制造2025”。制造业实现转型升级势在必行。我国政府提出&#xff0c;要大力支持传统…

oracle 9.2.0.2,在RedHat enterprise server 3 安装oracle9i 2.0.0.1 并升级到9.2.0.6

oracle9i 2.0.4上个月从oracle网站下载没有安装在els3上。参考了网上的一些文章&#xff0c;并根据文章的提示找了一些资料和补丁&#xff0c;完成了这次的安装。[more]1.安装RedHat EL3现在的安装界面都做的很好了,一路NEXT就可以安装了.如果有困难,请参考其他linux安装文档进…

spring -mvc 将对象封装json返回时删除掉对象中的属性注解方式

spring -mvc 将对象封装json返回时删除掉对象中的属性注解方式 在类名,接口头上注解使用在 JsonIgnoreProperties(value{"comid"}) //希望动态过滤掉的属性 例 JsonIgnoreProperties(value{"comid"}) public interface 接口名称{ } JsonIgnorePro…

HawkHost老鹰主机更换主域名方法

http://www.yd631.com/change-hawkhost-primary-domain/圣诞节优惠期间&#xff0c;很多童鞋们购买了老鹰主机&#xff0c;可能由于大家初次使用海外主机或者是CP面板的空间。购买主机的时候主域名是随便输入的或者是输入后想换一个。我们可以通过以下方法进行操作。之前我们QQ…

ERP CRM与SCM整合过程中的知识转移

ERP(Enterprise Resource Planning&#xff0c;企业资源计划)、CRM(Customer Relationship Management&#xff0c;客户关系管理)、SCM、CRM(Customer Relationship Management&#xff0c;客户关系管理)、SCM(supply chain management&#xff0c;供应链管理)作为现代企业管理…

ubuntu 64 12.04 oracle,ubuntu server 12.04 x86_64 下安装oracle xe 11 x86_64

1.下载oracle xe我下载的是oracle-xe-11.2.0-1.0.x86_64.rpm.zip2. 安装必要程序或文件$sudo apt-get install unzip chkconfig libaio1 alien3.解压上面的oraclexxx.zip文件,然后进行转换$sudo alien -d --scripts oracle-xe-11.2.0-1.0.x86_64.rpm上面转换完成后会生成一个 o…

IEnumerable 遍历用法

咋一看到IEnumerable这个接口&#xff0c;我们可能会觉得很神奇&#xff0c;在一般的编程时&#xff0c;基本上我们是想不到去用它的&#xff0c;可是&#xff0c;俗话说得好&#xff0c;存在便是道理&#xff0c;那么&#xff0c;它对我们来说&#xff0c;能够带来哪些奇妙的事…

DELPHI设置枚举类型size

delphi枚举类型长度默认为2个字节(单字)&#xff0c;而在C中枚举为4个字节(双字)&#xff0c;如果需要跨这两个平台编程&#xff0c;传输结构时会由于数据长度不一造成灾难。 经过查找资料&#xff0c;原来delphi可以通过{$Z} {$Z-} {$Z1} {$Z4} 等宏设置枚举类型的长度&#x…

Nginx 反向代理 websocket 协议

为什么80%的码农都做不了架构师&#xff1f;>>> 主要配置内容 server {listen 80;server_name xxx.xxx.xxx;location / {try_files $uri $uri/ /index.html;root /workspace/www;index index.html index.htm;}location ^~/letchat/ {proxy_pass http:/…

oracle中区间大小,Oracle的逻辑结构(表空间、段、区间、块)——总结

Oracle逻辑结构全景结构图以下为个人整理的一些关于Oracle逻辑结构的相关数据字典&#xff1a;SELECT * FROMDBA_TABLESPACES--记录各个表空间的详细信息SELECT * FROMDBA_TABLESPACE_USAGE_METRICS--记录各个表空间的使用状况SELECT * FROMDBA_DATA_FILES --记录各个数据文件的…

C#3.0之神奇的Lambda表达式和Lambda语句

“Lambda 表达式”是一个匿名函数&#xff0c;它可以包含表达式和语句&#xff0c;并且可用于创建委托或表达式目录树类型。所有 Lambda 表达式都使用 Lambda 运算符 >&#xff0c;该运算符读为“goes to”。该 Lambda 运算符的左边是输入参数&#xff08;如果有&#xff09…

[C++] Nested Radical Constant

做高数助教被天煞的大一学生坑了&#xff0c;发现是个未解问题&#xff0c;没有解析解。。 用C搞了下&#xff0c;就是这样。。。 No closed-form expression is known for this constant (Finch 2003, p. 8; S. Plouffe, pers. comm., Aug. 29, 2008). /*********************…

api-gateway实践(03)新服务网关 - 网关请求拦截检查

参考链接&#xff1a;http://www.cnblogs.com/jivi/archive/2013/03/10/2952829.html 一、为什么要拦截检查请求&#xff1f; 防止重放攻击、篡改重放&#xff0c;进行使用规格检查 1、请求可能是重放攻击 重放攻击的基本原理就是把以前窃听到的数据原封不动地重新发送给接收方…

oracle存储过程关键字有哪些,ORACLESTREAMS存储过程中的一些参数有哪些?

1&#xff0c;maintain_mode参数可取golbal或transportable tablepsaces&#xff0c;当该参数取global时&#xff0c;表示streams进行全库复制&#xff0c;否则表示streams进行表空间复制&#xff0c;需要在tablespace_names参数中指定待复制的一个或多个表空间。2&#xff0c;…

正则验证多个邮箱用分号隔开

代码如下&#xff1a; <script> var str xxxx126.com;123234234qq.com;xxxxxxxxxx.con.cn; var reg /^((([a-z0-9_\.-])([\da-z\.-])\.([a-z\.]{2,6}\;))*(([a-z0-9_\.-])([\da-z\.-])\.([a-z\.]{2,6})))$/; if(reg.test(str)){ alert(1); }else{ …

转载-使用 Feed4JUnit 进行数据与代码分离的 Java 单元测试

JUnit 是被广泛应用的 Java 单元测试框架&#xff0c;但是它没有很好的提供参数化测试的支持&#xff0c;很多测试人员不得不把测试数据写在程序里或者通过其它方法实现数据与代码的分离&#xff0c;在后续的修改和维护上有诸多限制和不便。Feed4JUnit 是开源的基于 JUnit 的扩…

青岛智能院助力智慧城市 打造智能产业“黄埔军校”

作为青岛市的主干道之一&#xff0c;山东路的拥堵状况一直让人头疼。近日&#xff0c;因为一种交通组织优化方案的实施&#xff0c;山东路和延吉路的通行率提高了近50%。而研发这种智能管控系统的正是位于青岛高新区的青岛智能产业技术研究院。截止今年5月份&#xff0c;青岛智…