JZOJ.5305【NOIP2017模拟8.18】C
Description
Input
Output
Sample Input
10 11
1 2
2 3
3 4
1 4
3 5
5 6
8 6
8 7
7 6
7 9
9 10
6
1 2
3 5
6 9
9 2
9 3
9 10
Sample Output
2
2
2
4
4
1
Data Constraint
Hint
题意有点问题,实际上简单路径这里指的是不经过重复边的路径。
这题Tarjan缩点,然后LCA统计两点间环的个数k,答案就是2k个路径。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#define M 600010
#define N 100010
#define mo 100000007
using namespace std;
int head[N],next[M],to[M],n,m,belong[N],dfn[N],low[N],zhan[N],sigh[N],num,ti,q,top,deep[N],visit[N],up[N][];
long long ans,sum[N];
void add(int u,int v){
num++;
next[num]=head[u];
to[num]=v;
head[u]=num;
num++;
next[num]=head[v];
to[num]=u;
head[v]=num;
}
void Tarjan(int x,int fa){
zhan[++top]=x;
ti++;
dfn[x]=ti;
low[x]=ti;
for (int v,i=head[x];i;i=next[i]){
v=to[i];
if (v==fa) continue;
if (!dfn[v]){
Tarjan(v,x);
low[x]=min(low[x],low[v]);
} else low[x]=min(low[x],dfn[v]);
}
if (dfn[x]==low[x]){
do{ sigh[x]++;
belong[zhan[top]]=x;
top--;
}while(zhan[top+]!=x);
sigh[x]--;
}
}
void DFS(int x,int fa){
if (x==) up[x][]=x;
else up[x][]=fa;
for (int i=;i<=;i++)
up[x][i]=up[up[x][i-]][i-];
deep[x]=deep[fa]+;
if (sigh[x]) sum[x]=sum[fa]+;
else sum[x]=sum[fa];
for (int v,i=head[x];i;i=next[i]){
v=to[i];
if (belong[v]==belong[fa]) continue;
if (belong[v]!=belong[x])
DFS(v,x);
}
}
long long kuai(long long a,long long b){
long long ans=;
long long mi=b;
long long qwq=a;
while (mi){
if (mi&) ans=ans*qwq%mo;
qwq=qwq*qwq%mo;
mi>>=;
}
return ans;
}
int lca(int u,int v){
if (deep[u]<deep[v]) swap(u,v);
for (int i=;i>=;i--)
if (deep[v]<=deep[up[u][i]])
u=up[u][i];
if (u==v) return u;
for (int i=;i>=;i--)
if (up[u][i]!=up[v][i])
u=up[u][i],v=up[v][i];
return up[u][];
}
int main(){
scanf("%d%d",&n,&m);
num=;
for (int i=,u,v;i<=m;i++){
scanf("%d%d",&u,&v);
add(u,v);
}
for (int i=;i<=n;i++)
sigh[i]=;
ti=;
top=;
Tarjan(,);
for (int i=;i<=n;i++){
if (belong[i]!=i)
for (int v,j=head[i];j;j=next[j]){
v=to[j];
if (belong[v]!=belong[i])
add(v,belong[i]);
}
}
sum[]=;
deep[]=;
DFS(,);
scanf("%d",&q);
for (int i=,u,v,father;i<=q;i++){
ans=;
scanf("%d%d",&u,&v);
if (u==v) if (sigh[belong[u]]) {printf("1\n");continue;}else {printf("0\n");continue;}
u=belong[u],v=belong[v];
if (deep[u]<deep[v]) swap(u,v);
father=lca(u,v);
ans=sum[u]+sum[v]-*sum[father]+(sigh[father]?:);
printf("%lld\n",kuai(,ans)%mo);
}
return ;
}
神奇的代码
JZOJ.5305【NOIP2017模拟8.18】C的更多相关文章
- JZOJ.5307【NOIP2017模拟8.18】偷窃
Description
- JZOJ.5306【NOIP2017模拟8.18】棋盘游戏
Description 这个游戏上在一个无限大的棋盘上, 棋盘上只有一颗棋子在位置(x,y)(x,y>=0)棋盘的左下角是(0,0)Amphetamine每次都是第一个移动棋子,然后Amphet ...
- [jzoj 5343] [NOIP2017模拟9.3A组] 健美猫 解题报告 (差分)
题目链接: http://172.16.0.132/senior/#main/show/5343 题目: 题解: 记旋转i次之后的答案为$ans_i$,分别考虑每个元素对ans数组的贡献 若$s_i& ...
- [JZOJ 5912] [NOIP2018模拟10.18] VanUSee 解题报告 (KMP+博弈)
题目链接: https://jzoj.net/senior/#contest/show/2530/2 题目: 众所周知,cqf童鞋对哲学有着深入的理解和认识,并常常将哲学思想应用在实际生活中,例如锻炼 ...
- [JZOJ 5910] [NOIP2018模拟10.18] DuLiu 解题报告 (并查集+思维)
题目链接: https://jzoj.net/senior/#contest/show/2530/0 题目: LF是毒瘤出题人中AK IOI2019,不屑于参加NOI的唯一的人.他对人说话,总是满口垃 ...
- [JZOJ 5911] [NOIP2018模拟10.18] Travel 解题报告 (期望+树形DP)
题目链接: http://172.16.0.132/senior/#contest/show/2530/1 题目: EZ同学家里非常富有,但又极其的谦虚,说话又好听,是个不可多得的人才. ...
- JZOJ 5305. 【NOIP2017提高A组模拟8.18】C (Standard IO)
5305. [NOIP2017提高A组模拟8.18]C (Standard IO) Time Limits: 1000 ms Memory Limits: 131072 KB Description ...
- JZOJ 5307. 【NOIP2017提高A组模拟8.18】偷窃 (Standard IO)
5307. [NOIP2017提高A组模拟8.18]偷窃 (Standard IO) Time Limits: 1000 ms Memory Limits: 262144 KB Description ...
- JZOJ 5230. 【NOIP2017模拟A组模拟8.5】队伍统计
5230. [NOIP2017模拟A组模拟8.5]队伍统计 (File IO): input:count.in output:count.out Time Limits: 1500 ms Memory ...
随机推荐
- Tsung运行环境安装(转)
转自:http://www.cnblogs.com/tsbc/p/4272974.html#_Toc372013359 tsung Tsung运行环境安装 检查安装一下依赖包,以免在安装的时候报错.( ...
- DHCP(动态主机配置协议)工作流程
一.DHCP的作用 我们先来看一下什么是DHCP,DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)它可以为客户机自动分配IP地址.子网掩码以及缺省网 ...
- [转]使用jquery-webcam插件,实现人脸采集并转base64
项目需求:在ie或chrome浏览器下,调用电脑摄像头(确保使用的是笔记本电脑,或者摄像头功能正常使用的台式机),进行人脸图像采集预览,并将图片的base64码传入到后台进行后续操作.该demo适用于 ...
- web压力测试指标
1.TPS每秒钟完成的web请求响应数量TPS=并发数/响应时间TPS是衡量系统性能的重要指标 2.并发数时间段内,系统同时处理的web请求响应数量 3.响应时间所有web请求处理完毕的时间 4.吞吐 ...
- nyoj 952 最大四边形 计算几何 转载
事实再一次证明:本小菜在计算几何上就是个渣啊,唉,,, 题意:平面上n个点(n<=300),问任意四个点组成的四边形(保证四条边不相交)的最大面积是多少. 分析: 原文地址 1.第一思路是枚举四 ...
- 华中农业大学校赛 I Catching Dogs
Catching Dogs Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 1140 Solved: 298[Submit][Status][Web B ...
- C++成员函数的存储方式
用类去定义对象时,系统会为每一个对象分配存储空间.如果一个类包括了数据和函数,要分别为数据和函数的代码分配存储空间. 按理说,如果用同一个类定义了10个对象,那么就需要分别为10个对象的数据和函数代码 ...
- 使用wc统计代码行数
最近写了一些代码,想统计一下代码的行数,在eclipse中好像没这功能,网上搜了一下才发现原来Linux有一个统计文件行数的命令wc.使用wc可以打印出每个文件和总文件的行数.字数和字节数,如果没有指 ...
- Hdu 2236 无题II 最大匹配+二分
题目链接: pid=2236">Hdu 2236 解题思路: 将行和列理解为二分图两边的端点,给出的矩阵即为二分图中的全部边, 假设二分图能全然匹配,则说明 不同行 不同列的n个元素 ...
- Soursight Insight 使用小结
1.Soursight Insight中添加自需要的文件过滤器: options->document options ->add type document type name:scatt ...