【jzoj3886】【道路维护】【并查集】
2017-01-19 11:37
323 查看
题目大意
最近徆多人投诉说C国的道路破损程度太大,以至亍无法通行
C国的政府徆重视这件事,但是最近财政有点紧,丌可能将所有的道路都进行维护,所以他们决定按照下述方案进行维护
将C国抽象成一个无向图,定义两个城市之间的某条路径的破损程度为该条路径上所有边破损程度的最大值,定义两个城市之间的破损程度为两个城市之间所有路径破损程度的最小值
然后C国政府向你提问多次,有多少个城市对的破损程度不超过L,他们将依照你的回答来决定到底怎样维护C国的道路。
解题思路
把边按边权从小到大排序,把询问从小到大排序,逐条枚举边,用并查集维护每一个连通块的大小,可以知道城市对的数目之和连通块大小有关,同时询问答案即可。
code
#include<cmath> #include<cstdio> #include<cstring> #include<algorithm> #define LF double #define LL long long #define min(a,b) ((a<b)?a:b) #define max(a,b) ((a>b)?a:b) #define fo(i,j,k) for(int i=j;i<=k;i++) #define fd(i,j,k) for(int i=j;i>=k;i--) using namespace std; int const maxn=1e4,maxm=1e5,maxq=1e5,inf=1e9; int n,m,q,fa[maxn+10],num[maxn+10]; LL ans[maxq+10]; struct rec{ int u,v,w; }; rec a[maxm+10],b[maxq+10]; bool cmp(rec x,rec y){ return x.w<y.w; } int get(int x){ if(!fa[x])return x; return fa[x]=get(fa[x]); } int main(){ freopen("d.in","r",stdin); freopen("d.out","w",stdout); scanf("%d%d%d",&n,&m,&q); fo(i,1,n)num[i]=1; fo(i,1,m)scanf("%d%d%d",&a[i].u,&a[i].v,&a[i].w); sort(a+1,a+m+1,cmp); fo(i,1,q)scanf("%d",&b[i].w),b[i].u=i; sort(b+1,b+q+1,cmp); int j=1;LL now=0; fo(i,1,m){ int fu=get(a[i].u),fv=get(a[i].v); if(fu!=fv){ for(;(j<=q)&&(b[j].w<a[i].w);j++)ans[b[j].u]=now; now+=1ll*(num[fu]+num[fv])*(num[fu]+num[fv]-1)/2-1ll*num[fu]*(num[fu]-1)/2-1ll*num[fv]*(num[fv]-1)/2; fa[fu]=fv;num[fv]+=num[fu]; } } fo(i,j,q)ans[b[i].u]=now; fo(i,1,q)printf("%lld ",ans[i]); return 0; }
相关文章推荐
- 【JZOJ3886】【长郡NOIP2014模拟10.22】道路维护
- 【JZOJ3886】道路维护
- jzoj 3886 道路维护
- JZOJ 3886. 【长郡NOIP2014模拟10.22】道路维护
- 【JZOJ 3886】 道路维护
- JZOJ4708. 【NOIP2016提高A组模拟8.20】奇洛金卡达 倒着做的思想+并查集维护
- JZOJ4769 【GDOI2017模拟9.9】graph CDQ分治+用按秩合并维护带撤销的并查集(BZOJ 4025)
- [BZOJ 3995] [SDOI2015] 道路修建 【线段树维护连通性】
- [HNOI2005]狡猾的商人(并查集维护前缀和)
- ZOJ 3659 Conquera New Region(并查集:维护根节点信息)
- BZOJ1202 [HNOI2005]狡猾的商人 并查集维护前缀和
- 【带权并查集维护相对关系】三道带权UFS基础题
- JZOJ 2413. 【NOI2005】维护数列
- jzoj5051 【GDOI2017模拟一试4.11】平行宇宙 [贪心,并查集]
- Codeforces Round #376 (Div. 2) C. Socks (并查集维护)
- [jzoj]3486. 【NOIP2013模拟联考10】道路改建(rebuild)(缩环+Tarjan+拓扑+bitset记录状态)
- bnuoj 51275(道路修建-并查集按秩合并)
- JZOJ 3766【BJOI2014】大融合(lct维护子树大小)
- [JZOJ3806] 小X的道路修建
- [PKU 1182] 食物链 (种类并查集+维护边权)