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 ...
随机推荐
- 变动性算法源代码分析与使用示例(copy_backward、 transform、 replace_copy_if 等)
首先回顾前面的文章,我们把for_each 归类为非变动性算法,实际上它也可以算是变动性算法,取决于传入的第三个参数,即函数 指针.如果在函数内对容器元素做了修改,那么就属于变动性算法. 变动性算法源 ...
- Dbvisual连接远程数据库报错Error Code: 17401
Long Message:违反协议 Details: Type: java.sql.SQLException Error Code: 17401 SQL State: null 现象: 本 ...
- tp模型和数据库操作方法
一.新建的模型名和表名一样,采用驼峰式,如表名user_type模型取名为UserType namespace app\index\model;use think\Model;class UserTy ...
- JEECG 简单实例讲解权限控制
业务背景:某公司要实现一个日志系统,用来了解员工的工作量饱和情况. 需求: 1.角色分为:员工.经理 两种. 2.员工每天在日志系统中填报工作总结,然后经理进行点评. 3.表单内容包含:姓名.日期.工 ...
- Atitit.软件仪表盘(7)--温度监测子系统--电脑重要部件温度与监控and警报
Atitit.软件仪表盘(7)--温度监测子系统--电脑重要部件温度与监控and警报 Cpu温度,风扇转速 主板温度 显卡温度 硬盘温度 电池温度 鲁大师 硬盘温度 Cpu温度 core temp ...
- python内置函数之vars()
vars([object]) 返回__dict__属性的值.当不传入参数时,和locals()等效.当函数接收一个参数时,参数可以是模块.类.类实例,或者定义了__dict__属性的对象. >& ...
- 如何生成项目的chm文档
如何生成项目的chm文档 2014-11-30 Generate .chm based documentation of your project using SandCastle tool
- jQuery 中 attr() 和 prop() 方法的区别<转>
前几天,有人给 Multiple Select 插件 提了问题: setSelects doesn't work in Firefox when using jquery 1.9.0 一直都在用 jQ ...
- HTML5中的拖放
关于HTML5中的拖放 拖放(Drag 和 Drop)是一种常见的特性,即抓取对象以后拖到另一个位置,在 HTML5 中,拖放是标准的组成部分.在HTML5中用户可以使用鼠标选择一个可拖动元素,将元素 ...
- 数论 + 扩展欧几里得 - SGU 106. The equation
The equation Problem's Link Mean: 给你7个数,a,b,c,x1,x2,y1,y2.求满足a*x+b*y=-c的解x满足x1<=x<=x2,y满足y1< ...