地理课(geography)

题目描述

地理课上,老师给出了一个巨大的地图,由于世界日新月异,会有一些道路在某一时刻被删除,也会有一些道路在某一时刻被修建。这里的道路均为双向的。

老师认为,有一些城市被分在了一个连通块中可以相互到达,而有一些城市不能够相互到达。而他想知道,每个时刻所有连通块大小的乘积是多少?

wzy看到这个地图的时候就蒙了,还好那只上天的喵及时帮助了他。现在他把这个毒瘤的地图拿过来给你,想试试看你能不能求出来。由于答案可能很大,输出乘积mod109+7mod109+7即可。

输入

第一行两个数n,mn,m,表示有nn个点,mm个时刻。接下来mm行每行三个数,要么是1uv1uv,要么是2uv2uv,分别表示添加一条无向边和删除一条无向边。

输出

共mm,每行一个数表示连通块大小乘积mod1,000,000,007mod1,000,000,007

上面是每个时刻操作后的图。乘积分别为:

2*1*1*1=2,3*1*1=3,3*1*1=3,3*2=6,5,3*2=6

数据范围及约定

subtask1:30pts,n≤1,000,m≤2,000n≤1,000,m≤2,000

subtask2:20pts,满足没有删除操作。

subtask3:50pts,n,m≤100,000n,m≤100,000保证没有重边自环,不会删除不存在的边。

来源

noip2018南外-模拟


solution

好题好题

考虑离线,按时间建一棵线段树

把每一个边的编号加进线段树对应的区间中

我们现在希望得到每一个叶子节点的值

那么每次暴力求是不行了

我们记下每一层的边连接的并查集的根与大小

返回时把边拆开即可

#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
#include<vector>
#define mod 1000000007
#define maxn 100005
#define ll long long
using namespace std;
int n,m,f[maxn],sz[maxn],t1,t2,op;
ll now,ans[maxn],ny[maxn];
struct node{int u,v,st,ed;
}e[maxn];
map<ll,int>ls;
struct no{int l,r;vector<int>x;
}tree[maxn*8];
struct Node{int id,x,y,size;
};
vector<Node>p;
void build(int k,int L,int R){tree[k].l=L,tree[k].r=R;if(L==R)return;int mid=L+R>>1;build(k*2,L,mid);build(k*2+1,mid+1,R);
}
void add(int k,int L,int R,int v){//cout<<k<<' '<<L<<' '<<R<<''<<endl;if(tree[k].l>=L&&tree[k].r<=R){tree[k].x.push_back(v);return;}int mid=tree[k].l+tree[k].r>>1;if(L<=mid)add(k*2,L,R,v);if(R>mid)add(k*2+1,L,R,v);
}
ll work(ll a,int num){ll an=1;while(num){if(num&1)an=an*a;a=a*a;a%=mod;an%=mod;num>>=1;}return an;
}
int getf(int k){if(f[k]==k)return k;return getf(f[k]);
}
void hb(int k){//cout<<"k: "<<k<<' '<<tree[k].l<<' '<<tree[k].r<<endl;for(int i=0;i<tree[k].x.size();i++){int t=tree[k].x[i];//cout<<t<<endl;int f1=getf(e[t].u),f2=getf(e[t].v);if(f1!=f2){now=now*ny[sz[f1]]%mod*ny[sz[f2]]%mod;now=now*(sz[f1]+sz[f2])%mod;if(sz[f1]<sz[f2]){p.push_back((Node){k,f1,f2,sz[f1]});f[f1]=f2;sz[f2]+=sz[f1];sz[f1]=0;}else {p.push_back((Node){k,f2,f1,sz[f2]});f[f2]=f1;sz[f1]+=sz[f2];sz[f2]=0;}}}
}
void turn(int k){int Size=p.size()-1;if(Size<0)return;//cout<<"Size "<<Size<<' '<<tree[k].l<<' '<<tree[k].r<<endl;for(int i=Size;p[i].id==k&&i>=0;i--){//cout<<p[i].x<<' '<<p[i].y<<' '<<sz[p[i].x]<<' '<<sz[p[i].y]<<endl;now=now*ny[sz[p[i].y]]%mod;f[p[i].x]=p[i].x;sz[p[i].x]=p[i].size;sz[p[i].y]-=sz[p[i].x];now=now*sz[p[i].x]%mod*sz[p[i].y]%mod;p.pop_back();}
}
void dfs(int k){hb(k);if(tree[k].l==tree[k].r){ans[tree[k].l]=now;turn(k);return;}dfs(k*2);dfs(k*2+1);turn(k);
}
int main()
{cin>>n>>m;for(int i=1;i<=m;i++){scanf("%d%d%d",&op,&e[i].u,&e[i].v);if(e[i].u>e[i].v)swap(e[i].u,e[i].v);ll tmp=(ll)e[i].u*100000+e[i].v;if(op==1){ls[tmp]=i;e[i].st=i;}else {int la=ls[tmp];e[la].ed=i-1;//ls[tmp]=0;}}build(1,1,m);for(int i=1;i<=m;i++){if(e[i].ed==0)e[i].ed=m;if(e[i].st&&e[i].ed)add(1,e[i].st,e[i].ed,i);}for(int i=1;i<=n;i++)ny[i]=work(i,mod-2);for(int i=1;i<=n;i++)f[i]=i,sz[i]=1;now=1;dfs(1);for(int i=1;i<=m;i++)printf("%lld\n",ans[i]);return 0;
}

地理课(geography)相关推荐

  1. 计算机中华五岳说课稿,中国五岳 地理课前三分钟演讲.ppt

    中国五岳 地理课前三分钟演讲 岳五是中国五大名山的总称.分别是东岳泰山(山东泰安).南岳衡山(湖南省衡阳市南岳区).西岳华山(陕西省华阴市).北岳恒山(山西省浑源县城南10公里).中岳嵩山(河南省登封 ...

  2. 2018.11.04-3988-地理课(geography)

    题目描述: 地理课上,老师给出了一个巨大的地图,由于世界日新月异,会有一些道路在某一时刻被删除,也会有一些道路在某一时刻被修建.这里的道路均为双向的. 老师认为,有一些城市被分在了一个连通块中可以相互 ...

  3. 某地理老师的暴强言论

    发信人: christinetwo (christinetwo), 信区: Joke 标  题: zz某地理老师的暴强言论~爆笑经典!!强力推荐! 发信站: 两全其美网 (Wed Jan 23 12: ...

  4. 中学计算机教学叙事范文,初中地理教育叙事范文

    教育叙事,即是讲有关教育的故事.它是教育主体叙述教育教学中的真实情境的过程,其实质是通过讲述教育故事,体悟教育真谛的一种研究方法.以下是出国留学网范文栏目小编为您整理初中地理教育叙事范文,供您参考,希 ...

  5. #地形剖面图_备战中考 地理图表判读——地形剖面图

    首先感谢一位对于区域图一文提出问题的同学,感谢你的认真阅读和提出问题,同时祝贺你对于此知识点的熟练掌握.现更正 区域图知识点1  大洲轮廓图 2018年-2020年北京各区中考地理模拟试卷46套,现价 ...

  6. 计算机地理绘图软件叫什么,地理教师如何选择理想的绘图软件 ──基于对常用绘图软件的比较与分析...

    一位前苏联地理教育家说过:"没有地图的地理课,也就没有地理了."这说明地理教学与地图有着非常密切的关系.在日常的授课.编写试题.教学研究中,地理教师都需要用到各种地图,如政区图.统 ...

  7. 地理科学国内外核心期刊汇总

    地理科学国内外核心期刊汇总 1.GIS期刊目录 地球信息科学 , Geo-information Science,期刊荣誉:ASPT来源刊 CJFD收录刊 地理与地理信息科学 , Geography ...

  8. 开发者实践:为了“网课”不痛苦,在校生做出了自己在线教育系统

    在 RTC 2020 编程挑战赛春季赛中,一站式云课堂 Xeducation 获得了第二赛道的最佳实践奖.开发这个项目的团队是来自上海科技大学的几名在校生. 经过疫情期间的网课学习后,他们发现了很多体 ...

  9. 计算机版初中地理知识点总结,初中地理教学计划精选5篇汇总

    地理教师要做好教学计划,培养学生学习地理的兴趣和初步能力,最终使学生从"学会地理",走向"会学地理.今天小编在这给大家带来初中地理教学计划,接下来我们一起来看看吧! 初中 ...

最新文章

  1. android gravity和layout_gravity区别
  2. C++中OpenCV应用
  3. 不小心删除了某个包的一部分,重新安装方法
  4. 过程日志定位疑难问题
  5. MySQL数据库基本操作语法
  6. P1251 餐巾计划问题 费用流
  7. 标准代码页(codepage)列表
  8. string类的函数
  9. Jenkins非常详细的教程四(钩子程序,定时构建实现)
  10. 怎么复制黑苹果config配置_Catia中端电脑配置推荐(黑苹果)
  11. 职业经验分享之我是如何转行成为数据分析师的
  12. 直流DC稳压降压电源模块芯片简单对比
  13. 开关电源初级和次级变压器之间的Y电容作用
  14. QQ邮箱添加网易邮箱
  15. Python猜数字项目源代码
  16. 【opencv小案例-对象提取】阈值分割+形态学处理+面积横纵比过滤
  17. Nginx 之实现原理
  18. MapX.h和MapX.cpp下载
  19. 程序员小灰漫画算法合集
  20. 微信小程序之会议预约管理系统(含源码+论文+答辩PPT等)

热门文章

  1. Nginx 配置图片反向代理
  2. win11微软新系统全新效果曝光
  3. 咕咕机G3vs喵喵机使用心得对比
  4. 最佳治理实践?一文读懂YFI运行机制
  5. java计算机毕业设计景区失物招领平台演示录像源程序+mysql+系统+lw文档+远程调试
  6. 电脑连上WIfi但无网络的问题解决办法
  7. MUR560D-ASEMI快恢复二极管MUR560D
  8. C++实验(6) string类与STL
  9. python第三周笔记_第三周 day3 python学习笔记
  10. 上班时间写开源软件,结果被单位告被警察抓,这算什么?