bzoj4153 [Ipsc2015]Familiar Couples
Description
Input
Output
#include<cstdio>#include<vector>
const int P=1e9+,N=1e6+;
inline int read(){
int x=,c=getchar();
while(c>''||c<'')c=getchar();
while(c>=''&&c<='')x=x*+c-'',c=getchar();
return x;
}
inline void exch(int&a,int&b){int c=a;a=b;b=c;}namespace Map{
const int mx=;
unsigned int nw=;
unsigned int xs[mx],ys[mx],zs[mx],ds[mx];
inline void clear(){
nw++;
}
inline int get(unsigned int x,unsigned int y,int inc){
unsigned int w=(x*+y*+)%mx;
while(ds[w]==nw){
if(xs[w]==x&&ys[w]==y){
int v=zs[w];
zs[w]+=inc;
return v;
}
w+=;
if(w>=mx)w-=mx;
}
ds[w]=nw;
xs[w]=x;ys[w]=y;zs[w]=inc;
return ;
}
}
int T,n,m,now=,Ans,ans;
int h1[N],h2[N],f1[N],f2[N],sz1[N],sz2[N],nx1[N],nx2[N];
int t[N],d[N];
std::vector<int>v1[N],v2[N];
int main(){
T=read();
while(T--){
n=read();m=read();
Ans=ans=;
Map::clear();
for(int i=;i<=n;i++){
Map::get(i,i,);
f1[i]=f2[i]=i;
v1[i].clear();v2[i].clear();
v1[i].push_back(i);
v2[i].push_back(i);
}
for(int i=,op,a,b;i<=m;++i){
op=read();a=read();b=read();
++now;
if(op==){
if(f1[a]!=f1[b]){
if(v1[f1[a]].size()>v1[f1[b]].size())exch(a,b);
std::vector<int>&vc=v1[f1[a]];
for(int x=;x<vc.size();x++){
int p=vc[x];
int f=f2[p];
if(d[f]!=now)d[f]=now,ans=(ans+Map::get(f1[p],f,-)*1ll*Map::get(f1[b],f,)%P)%P;
else Map::get(f1[p],f,-),Map::get(f1[b],f,);
f1[p]=f1[b];
v1[f1[b]].push_back(p);
}
vc.clear();
}
}else{
if(f2[a]!=f2[b]){
if(v2[f2[a]].size()>v2[f2[b]].size())exch(a,b);
std::vector<int>&vc=v2[f2[a]];
for(int x=;x<vc.size();x++){
int p=vc[x];
int f=f1[p];
if(d[f]!=now)d[f]=now,ans=(ans+Map::get(f,f2[p],-)*1ll*Map::get(f,f2[b],)%P)%P;
else Map::get(f,f2[p],-),Map::get(f,f2[b],);
f2[p]=f2[b];
v2[f2[b]].push_back(p);
}
vc.clear();
}
}
Ans=(Ans+ans*1ll*i%P)%P;
}
printf("%d\n",Ans);
}
return ;
}
bzoj4153 [Ipsc2015]Familiar Couples的更多相关文章
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- Sicily 1021. Couples
题目地址:1021. Couples 思路: 想清楚了这道题其实很简单.利用夫妻出现的位置作为下标,并设为同一值,第一对夫妻值为1,第二对为2,以此类推,存储完毕即可进入下一步. 利用栈这个数据结构: ...
- Julia is a high-level, high-performance dynamic programming language for technical computing, with syntax that is familiar to users of other technical
http://julialang.org/ julia | source | downloads | docs | blog | community | teaching | publications ...
- [LeetCode] Couples Holding Hands 两两握手
N couples sit in 2N seats arranged in a row and want to hold hands. We want to know the minimum numb ...
- [Swift]LeetCode765. 情侣牵手 | Couples Holding Hands
N couples sit in 2N seats arranged in a row and want to hold hands. We want to know the minimum numb ...
- [CC-COUPLES]Couples sit next to each other
[CC-COUPLES]Couples sit next to each other 题目大意: 有\(n(n\le5\times10^5)\)对小伙伴共\(2n\)个人坐成一圈.刚开始编号为\(i\ ...
- 每日英语:Why Rate Your Marriage? A Numerical Score Can Help Couples Talk About Problems
When marriage therapist Sharon Gilchrest O'Neill met with new clients recently, she asked them why t ...
- ZOJ 3161 Damn Couples 动态规划 难度:2
Damn Couples Time Limit: 1 Second Memory Limit: 32768 KB As mentioned in the problem "Coup ...
- LeetCode765. Couples Holding Hands
N couples sit in 2N seats arranged in a row and want to hold hands. We want to know the minimum numb ...
随机推荐
- [置顶]使用scrapy_redis,自动实时增量更新东方头条网全站新闻
存储使用mysql,增量更新东方头条全站新闻的标题 新闻简介 发布时间 新闻的每一页的内容 以及新闻内的所有图片.项目文件结构. 这是run.py的内容 1 #coding=utf-8 2 from ...
- 不同数据库的driverClassName与url
# Properties file with JDBC-related settings. ########## # HSQLDB # ########## #jdbc.driverClassName ...
- 《JAVA----day01和day02》
1,(在有符号的情况下)若一个二进制数都是1,则对应的十进制数是-1 2,在定义数值类型时,若无特别说明,整数默认:int 小数默认:double 在内存中 占字节数 取值范围 (1)byte:1个 ...
- 阿里java面试题
引言 其实本来真的没打算写这篇文章,主要是LZ得记忆力不是很好,不像一些记忆力强的人,面试完以后,几乎能把自己和面试官的对话都给记下来.LZ自己当初面试完以后,除了记住一些聊过的知识点以外,具体的内容 ...
- 玩转TypeScript(3)--数组
数组的语法和语义与C#数组非常相似,首先要指定一个数组名,后跟冒号,冒号后面紧跟数组的类型,数组类型名后面跟方括号表示当前定义的是一个数组,对于一个空的数组定义,可以使用如下的语法: btnArray ...
- windows运行打开服务命令
1. gpedit.msc-----组策略 2. sndrec32-------录音机 3. Nslookup-------IP地址侦测器 4. explorer-------打开资源管 ...
- CodeForces - 1087F:Rock-Paper-Scissors Champion(set&数状数组)
n players are going to play a rock-paper-scissors tournament. As you probably know, in a one-on-one ...
- SQL Server2008 R2命令行启动及停止SQL服务的方法
===================================================== 在 SQL Server中,想要启动或停止SQL Server服务,通过SQL Server ...
- Ordering Tasks 拓扑排序
John has n tasks to do. Unfortunately, the tasks are not independent and the execution of one task i ...
- 强连通分量【k 算法、t 算法】
连通分量就是一个各个顶点能互相达到的图 无向图的连通分量选取任意一个顶点使用DFS遍历即可,遍历完所有顶点所需的DFS的次数就是连通分量的数量 有向图的强连通分量由于是有向的[从A点开始DFS能访问到 ...