并查集 Travel

来源:互联网 发布:mac 无损 图片拼接 编辑:程序博客网 时间:2024/06/07 00:36

问题 A: Travel

时间限制: 1 Sec  内存限制: 512 MB

题目描述

输入

4 4 4
1 2 1
2 3 3
3 4 2
4 1 4
3 2
3 3
3 1
3 4

输出

2
4
1
4

提示

     干找会超时。。可以利用刚刚做过的魔法森林的思路,因为对于一个询问的len,只可以走边权<=它的,因此把询问的len去重后按大小排序,每次只建边权小于等于它的边。更新询问的答案。

     其实这样还会超时,所以不用建边了,用并查集的思想,把每个连通块合并在一起,记录size,size由最顶端祖先记录,查询时只要找此节点祖先的size就行了。

    

#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#define N 100000using namespace std;int read(){int sum=0,f=1;char x=getchar();while(x<'0'||x>'9'){if(x=='-')f=-1;x=getchar();}while(x>='0'&&x<='9'){sum=(sum<<1)+(sum<<3)+x-'0';x=getchar();}return sum*f;}struct road{int v,next,l;} lu[4*N+5];struct node{int u,v,l;} f[4*N+5];struct Q{int id,x,len;} q[N+5];int n,m,k,adj[N+5],e,A[N+5],sz,sum;int ans[N+5],hh[N+5],fa[N+5];void add(int u,int v,int l){lu[++e].v=v;lu[e].l=l;lu[e].next=adj[u];adj[u]=e;}inline bool cmp(const Q &a,const Q &b){return a.len<b.len;}inline bool cmp1(const node &a,const node &b){return a.l<b.l;}int find(int x){if(fa[x]==x)return x;fa[x]=find(fa[x]);return fa[x];}void hb(int x,int y){int x1=find(x),y1=find(y);if(x1!=y1){fa[x1]=y1,hh[y1]+=hh[x1];}}int main(){//freopen("travel.in","r",stdin);//freopen("travel.out","w",stdout);n=read();m=read();k=read();int x,y,z;for(int i=1;i<=m;i++){f[i].u=read();f[i].v=read();f[i].l=read();}for(int i=1;i<=k;i++){q[i].x=read();q[i].len=read();q[i].id=i;A[i]=q[i].len;}for(int i=1;i<=n;i++)fa[i]=i,hh[i]=1;sort(A+1,A+k+1);sz=unique(A+1,A+k+1)-A-1;sort(q+1,q+k+1,cmp);sort(f+1,f+m+1,cmp1);int j=1,l=1;for(int i=1;i<=sz;i++){   // for(int j=1;j<=n;j++)cout<<fa[j]<<endl;if(l>k)break;for(;j<=m;j++){if(f[j].l>A[i])break;    hb(f[j].u,f[j].v);}for(;l<=k;l++){if(q[l].len>A[i])break;ans[q[l].id]=hh[find(q[l].x)];}}for(int i=1;i<=k;i++)   printf("%d\n",ans[i]);}

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 大班牙又痛又摇怎么办 大班安全教案着火了怎么办 小班社会生病了怎么办反思 脚扭伤了怎么办的反思 中班安全迷了眼怎么办 15个月的小孩长泡疹怎么办 墨盒加错颜色墨水怎么办 墨盒颜色加错了怎么办 uV打印有色差是怎么办 cmyk和rgb有色差怎么办 染头发新长出来怎么办 白色衣服弄上口红怎么办 口红弄到牛仔裤上怎么办 口红弄到沙发上怎么办 做了拔罐后背疼怎么办 拔罐拔出血水后怎么办 拨了罐浑身疼怎么办 拔完火罐洗澡疼怎么办 拔罐之后脊背疼怎么办? 五个月的狗胆小怎么办 电脑颜色不正常分辨率调不了怎么办 宝宝认人怎么办 五个月 新生儿42天听力筛查未通过怎么办 幼儿大便干燥拉不下粑粑怎么办 宝宝大便干燥拉粑粑带浓血怎么办 新生儿便秘4天了怎么办 写卷子的题目不认识怎么办? 2个月小猫尿床怎么办 安全教案鱼刺卡住了怎么办 被鱼刺卡住怎么办安全教案 小班健康教案生病了怎么办 被蜜蜂蛰了怎么办教案 走丢了怎么办大班反思 小孩吃了硬物怎么办 小孩吞了硬物怎么办 小学二年级孩子成绩不好怎么办 二年级孩子成绩不好怎么办 一年级学的不好二年级怎么办 17个月宝宝夜奶怎么办 小孩吃积食了吐怎么办 11个宝宝不会爬怎么办