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 ...
随机推荐
- jdbc链接基础
1 jdbc 链接两种方式,通过jdbc链接mysql数据库,url:jdbc:mysql://ip:端口[/database name] 通过什么驱动器,链接什么数据库,数据库的ip,连接端口,可以 ...
- mysql-connector-python 源码安装
一.下载mysql-connector-python的源码包: 下载页面: https://dev.mysql.com/downloads/connector/python/ 我这下载的是mysql- ...
- INFORMIX的dbexport和dbimport使用示例说明
INFORMIX-IDS数据库进行迁移中,我们在进行数据级别的迁移时,采用dbexport,dbimport来完成.dbexport导出数据库中所有对象的模式脚本和表数据文件,该模式脚本中包含有表等的 ...
- [svc]salt-grains
用途 1,匹配客户端 2,配置文件里使用 3,资产管理 定义grains方法1: 方法2:
- CGROUP相关知识
安装 CentOS 6 yum install libcgroup CentOS 7 yum install libcgroup-tools 使用 默认情况下有几个控制器可以进行限制,分别是 cpus ...
- Nginx、PCRE和中文URL(UTF8编码)rewrite路径重写匹配问题
最近遇到了使用Nginx 重写中文UTF8编码路径的问题. 才发现默认情况下Nginx的rewrite是不支持UTF8匹配的. 比如: rewrite ^/(..)$ /2个字符文章.html bre ...
- 模拟元素的title属性,自定义Vue指令
function showTitle(el, title) { const popover = getPopover() const popoverStyle = popover.style if ( ...
- 用C语言(apue)实现 把时间戳转换为国标格式的字符串(2017-07-17 22:36:12)的函数
/*******************************************************************************/ /** *** 函 数 名: cha ...
- codeblocks 配置OpenGL
一.选择编译器环境 这里选择codeblocks,带MinGW的版本. 二.下载glut工具包 网址:http://pan.baidu.com/s/1eQriTQM 三.配置glut 解压缩下载的gl ...
- 巧用set比较大小,缩短时间复杂度
struct Node { long long a; long long b; long long c; long long num; int i; bool operator < (const ...