大意: 给定无向图, 每个点最多属于一个简单环, 多组询问, 求给定起点终点, 有多少条简单路径.

先缩环, 然后假设两点树上路径经过$cnt$个环, 那么答案就为$2^{cnt}$.

要注意缩环建树时要加单向边.

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <queue>
#define REP(i,a,n) for(int i=a;i<=n;++i)
#define pb push_back
using namespace std; template <class T> void rd(T &x){x=0;bool f=0;char c=getchar();while(c<'0'||c>'9'){if(c=='-')f=1;c=getchar();}while('0'<=c&&c<='9'){x=x*10+c-'0';c=getchar();}if(f)x=-x;} const int N = 1e6+10, P = 1e9+7;
int n,m,dep[N],fa[N];
int s[N],vis[N],sz[N];
int son[N],top[N],v[N],fac[N];
vector<int> g[N],gg[N];
int Find(int x) {return s[x]?s[x]=Find(s[x]):x;}
void add(int x, int y) {
x=Find(x),y=Find(y);
if (x!=y) s[x]=y;
}
void get(int x, int y) {
if (dep[x]<dep[y]) return;
vis[y] = 1;
for (; x!=y; x=fa[x]) add(x,y),vis[x]=1;
}
void dfs(int x, int f) {
fa[x]=f,dep[x]=dep[f]+1;
for (int y:g[x]) if (y!=f) {
if (dep[y]) get(x,y);
else dfs(y,x);
}
}
void dfs2(int x, int f, int d) {
sz[x]=1,fa[x]=f,dep[x]=d,v[x]=v[f]+vis[x];
for (int y:gg[x]) if (y!=f) {
dfs2(y,x,d+1),sz[x]+=sz[y];
if (sz[y]>sz[son[x]]) son[x]=y;
}
}
void dfs3(int x, int tf) {
top[x] = tf;
if (son[x]) dfs3(son[x],tf);
for (int y:gg[x]) if (!top[y]) dfs3(y,y);
}
int lca(int x, int y) {
while (top[x]!=top[y]) {
if (dep[top[x]]<dep[top[y]]) swap(x,y);
x = fa[top[x]];
}
return dep[x]<dep[y]?x:y;
} int main() {
fac[0]=1;
REP(i,1,N-1) fac[i]=fac[i-1]*2%P;
rd(n),rd(m);
REP(i,1,m) {
int u, v;
rd(u),rd(v);
if (u==v) continue;
g[u].pb(v),g[v].pb(u);
}
dfs(1,0);
int rt = 1;
REP(i,1,n) if (vis[i]) rt = Find(i);
REP(i,1,n) {
for (int j:g[i]) {
int u=Find(i),v=Find(j);
if (u!=v) gg[u].pb(v);
}
}
dfs2(rt,0,0),dfs3(rt,rt);
scanf("%d", &m);
while (m--) {
int x, y;
scanf("%d%d", &x, &y);
x = Find(x), y = Find(y);
int l = lca(x,y);
printf("%d\n", fac[v[x]+v[y]-v[l]-v[fa[l]]]);
}
}

Cactus CodeForces - 231E (无向图缩环)的更多相关文章

  1. Codeforces Round #143 (Div. 2) E. Cactus 无向图缩环+LCA

    E. Cactus   A connected undirected graph is called a vertex cactus, if each vertex of this graph bel ...

  2. HDU 2242 考研路茫茫——空调教室 无向图缩环+树形DP

    考研路茫茫——空调教室 Problem Description 众所周知,HDU的考研教室是没有空调的,于是就苦了不少不去图书馆的考研仔们.Lele也是其中一个.而某教室旁边又摆着两个未装上的空调,更 ...

  3. bzoj 1023: [SHOI2008]cactus仙人掌图 tarjan缩环&&环上单调队列

    1023: [SHOI2008]cactus仙人掌图 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 1141  Solved: 435[Submit][ ...

  4. We Need More Bosses CodeForces - 1000E (无向图缩点)

    大意: 给定无向连通图, 定义两个点$s,t$个价值为切断一条边可以使$s,t$不连通的边数. 求最大价值. 显然只有桥会产生贡献. 先对边双连通分量缩点建树, 然后求直径即为答案. #include ...

  5. HDU 4612 Warm up tarjan缩环+求最长链

    Warm up Problem Description   N planets are connected by M bidirectional channels that allow instant ...

  6. poj-3177(无向图缩点)

    题意:给你n个点,m条边的无向联通图,问你最少增加几条边,使得这个图每对点至少有两条路径 解题思路:考虑每个环内的点必定有>=2条路径,所以先把这个无向图中的环去掉,用并查集缩环,然后剩下的图一 ...

  7. zstu.4191: 无向图找环(dfs树 + 邻接表)

    4191: 无向图找环 Time Limit: 5 Sec  Memory Limit: 128 MB Submit: 117  Solved: 34 Description 给你一副无向图,每条边有 ...

  8. hdu-4612(无向图缩点+树的直径)

    题意:给你n个点和m条边的无向图,问你如果多加一条边的话,那么这个图最少的桥是什么 解题思路:无向图缩点和树的直径,用并查集缩点: #include<iostream> #include& ...

  9. [Bzoj1051][HAOI2006]受欢迎的牛(缩环)

    1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 6676  Solved: 3502[Submit][Sta ...

随机推荐

  1. redhat7.4安装git(按照官网从源码安装)

    按照官方文档建议使用源码安装 1.为什么不用yum安装 yum安装确实简单,只用一行命令就可以了,但是yum安装的版本太低. //安装前使用info查看git版本信息等 yum info git yu ...

  2. Ubuntu18.04上安装N卡驱动、CUDA、CUDNN三连

    环境:Ubuntu18.04 显卡驱动真的挺方便的,CUDA和CUDNN还是踩了一些坑2333 1.安装显卡驱动 安装ubuntu更新或sudo apt-get update & sudo a ...

  3. EEPROM与FLASH

    最初的ROM rom最初不能编程,出厂什么内容就永远什么内容,不灵活.后来出现了prom,可以自己写入一次,要是写错了,只能换一片,自认倒霉. 人类文明不断进步,终于出现了可多次擦除写入的EPROM, ...

  4. php中_initialize()函数与 __construct()函数的区别说明

    _initialize()方法是在任何方法执行之前,都要执行的,当然也包括 __construct构造函数. 也就是说如果存在_initialize()函数,调用对象的任何方法都会导致_initial ...

  5. oracle-sql脚本

    select * from dba_users; create tablespace kyc_coo; create user kyc_coo identified by "123456&q ...

  6. CISCN 2019 writeup

    划水做了两个pwn和两个逆向...... 二进制题目备份 Re easyGO Go语言,输入有Please字样,ida搜索sequence of bytes搜please的hex值找到字符串变量,交叉 ...

  7. win10 Java JDK环境变量配置

    注意下载JDK 版本不需太高(百度一下jdk下载就好了)   第一步 我们首先打开win10电脑的资源管理器,快捷键win+E 然后选中此电脑,鼠标右键在弹出的菜单中选中属性的按钮 第二步 看到窗口的 ...

  8. IIS中应用Application Request Route 配置负载均衡

    转自:https://blog.csdn.net/wucong60/article/details/84930234 简介ApplicationRequest Route(后面简称为ARR)是一个寄宿 ...

  9. C#程序 界面显示运行信息

    1.使用RichTextBox,难免要在多线程调用,所以需要委托. Color定义此条信息用什么颜色显示.可以不同的颜色显示不同的信息. private void ShowMsg(Color colo ...

  10. flask上下文管理相关 - threading.local 以及原理剖析

    threading.local 面向对象相关: setattr/getattr class Foo(object): pass obj = Foo() obj.x1 = 123 # object.__ ...