摘要: 在每条边两个点中间加上一个虚拟点代表这条边权,就可以化边权为点权。把没删掉的边用LCT维护一棵生成树,树边都是桥。对于一条非树边,把树上对应路径上所有边的权值都修改为0,表示都不是桥。然后倒着处理询问,对于每次删掉的边,把两点路径上边权都修改为0。询问等价于查询两点间边权和,若两点连通且路径上不存在... 阅读全文
posted @ 2015-07-27 20:45 Claris 阅读(483) 评论(0) 推荐(0) 编辑
摘要: 首先一遍Dijkstra求出S到每个点的最短路,并建出最短路图。那么对于一条边,求在这条边不能使用的情况下,到首都S的最短时间会变长的点的数目,等价于求去掉这条边后在最短路图中不能从S出发到达的点的数目。对于边x->y,新建一个点z,然后连边x->z->y,这样只需要计算从S到i上必须经过z的点数。... 阅读全文
posted @ 2015-07-27 19:26 Claris 阅读(506) 评论(0) 推荐(0) 编辑
摘要: 考虑分块,每块大小为13,则一共需要38465块,求出b[i]表示前i块的和。查询时中间部分可以$O(1)$查询,只需再往两边累加零散的不超过26个数的和。空间上一共需要开500000的int和38465的long long。#includetypedef long long ll;const in... 阅读全文
posted @ 2015-07-27 12:21 Claris 阅读(401) 评论(0) 推荐(0) 编辑
摘要: f[i]=min(f[j])+1,线段j与线段i有交,且l[i]-l[j]=x[i],x[j]#includeconst int N=250010,inf=2000000000;int n,L,i,j,k,root,cmp_d,X,Y;struct P{int x,y,l,f,p;}a[N];inl... 阅读全文
posted @ 2015-07-27 01:50 Claris 阅读(454) 评论(0) 推荐(0) 编辑