jzoj4223-旅游【并查集】
生活随笔
收集整理的這篇文章主要介紹了
jzoj4223-旅游【并查集】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
正題
題目大意
nnn個點mmm條邊,qqq次詢問走邊權小于xxx的能聯通的點對數。
解題思路
將邊權排序,然后并查集預處理答案即可。
時間復雜度O(mlog?m)O(m\log m)O(mlogm)
codecodecode
#include<cstdio> #include<cstring> #include<algorithm> #define ll long long using namespace std; const ll N=1e5+10; struct node{ll x,y,w; }e[N]; ll T,n,m,q,fa[N],siz[N],ans[N]; bool cmp(node x,node y) {return x.w<y.w;} ll find(ll x) {return (fa[x]==x)?(x):(fa[x]=find(fa[x]));} int main() {scanf("%lld",&T);while(T--){memset(ans,0,sizeof(ans));scanf("%lld%lld%lld",&n,&m,&q);for(ll i=1;i<=n;i++)fa[i]=i,siz[i]=1;for(ll i=1;i<=m;i++)scanf("%lld%lld%lld",&e[i].x,&e[i].y,&e[i].w); sort(e+1,e+1+m,cmp);for(ll i=1;i<=m;i++){ll x=find(e[i].x),y=find(e[i].y);if(x==y)continue;ans[e[i].w]+=siz[x]*siz[y]*2;fa[y]=x;siz[x]+=siz[y];}for(ll i=1;i<=1e5;i++)ans[i]+=ans[i-1]; for(ll i=1;i<=q;i++){ll x;scanf("%lld",&x);printf("%lld\n",ans[x]);}} }總結
以上是生活随笔為你收集整理的jzoj4223-旅游【并查集】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: P3287-[SCOI2014]方伯伯的
- 下一篇: 巫师3电脑配置要求(巫师3 电脑配置)