题意简述:给出无向图,会有重边,然后给你两个点a,b,让你计算有多少点对(x,y)满足从x到y的所有路径都经过a和b

题解:先从a,b两点出发进行dfs,dfs的过程中不能经过a,b两点(除了开始)

所有的点分为了三类,第一类是a能到但是b到不了,第二类是b能到但是a到不了,第三类是a,b都能到

首先每一类点的内部之间的点对对答案没有贡献,因为他们之间到达可以只经过a,b其中一个点

所以只需要考虑不同类之间的点对答案的贡献

第一类和第三类对答案没有贡献,因为对于点对x,y,x可以先a再到y,而不需要今过b点,因此没有贡献

同理第二类对第三类也没有贡献

第一类和第二类,他们相通必须经过a,b两点

因此答案就是第一类的点数×第二类的点数

const int maxn=2e5+5;
const int maxm=1e6+5;
const int inf=1e9; int n,m,a,b; int head[maxn],ver[maxm],nex[maxm],tot; void inline AddEdge(int x,int y){
ver[++tot]=y,nex[tot]=head[x],head[x]=tot;
} bool vis[maxn]; int cnt[maxn]; void dfs(int x,int f){
vis[x]=1;
cnt[x]+=f;
for(int i=head[x];i;i=nex[i]){
int y=ver[i];
if(!vis[y] && y!=a && y!=b) {
dfs(y,f);
}
}
} void solve(){
cin>>n>>m>>a>>b;
tot=0;
for(int i=1;i<=n;i++)
head[i]=0;
for(int i=0;i<m;i++){
int x,y;
scanf("%d%d",&x,&y);
AddEdge(x,y);
AddEdge(y,x);
}
for(int i=1;i<=n;i++)
vis[i]=cnt[i]=0;
dfs(a,1);
for(int i=1;i<=n;i++)
vis[i]=0;
dfs(b,2);
ll s1=0,s2=0;
for(int i=1;i<=n;i++){
// cout<<cnt[i]<<endl;
if(i!=a && i!=b) {
if(cnt[i]==1) s1++;
else if(cnt[i]==2) s2++;
}
}
//cout<<s1<<' '<<s2<<endl;
printf("%lld\n",s1*s2);
}
int main(){
int t;
cin>>t;
while(t--)
solve();
}

  

cf1276B的更多相关文章

  1. B. Two Fairs 解析(思維、DFS、組合)

    Codeforce 1276 B. Two Fairs 解析(思維.DFS.組合) 今天我們來看看CF1276B 題目連結 題目 給一個連通圖,並給兩個點(\(a,b\)),求有多少點對使得:任一路徑 ...

随机推荐

  1. 使用alpine制作最小化的JDK基础镜像

    注意:这里使用的是oracle的JRE,版本是1.8. 1.解压jre包,删除根目录下文本文件,然后删除其他不必要文件. #解压 tar xvcf jre-8u161-linux-x64.tar.gz ...

  2. 用goaccess实现可视化并实时监控access日志

    goaccess access.log -o ../html/report.html --real-time-html time-format='%H:%M:%S' --date-format=‘%d ...

  3. partition show for oracle version

    Dear all You may remember that my blog has a view script for checking sqlserver partition tables. No ...

  4. STM32片外SRAM作运行内存

    本例演示用的软硬件: 片内外设驱动库:STM32CubeF41.24.1的HAL库1.7.6,2019年4月12日 IDE:MDK-ARM 5.28.0.0,2019年5月 开发板:片外SRAM挂在F ...

  5. 第2章 Java并行程序基础(二)

    2.3 volatile 与 Java 内存模型(JMM) volatile对于保证操作的原子性是由非常大的帮助的(可见性).但是需要注意的是,volatile并不能代替锁,它也无法保证一些复合操作的 ...

  6. CentOS7 Cloudera Manager6 完全离线安装 CDH6 集群

    本文是在CentOS7.4 下进行CDH6集群的完全离线部署.CDH5集群与CDH6集群的部署区别比较大. 说明:本文内容所有操作都是在root用户下进行的. 文件下载 首先一些安装CDH6集群的必须 ...

  7. Integer缓存机制-基本数据类型和包装类型-自动拆装箱

    Integer缓存机制 总结: 1.jdk1.5对Integer新增了缓存机制,范围在-128-127(这个范围的整数值使用频率最高)内的自动装箱返回的是缓存对象,不会new新的对象,所以只要在缓存范 ...

  8. AtCoder Beginner Contest 156

    https://atcoder.jp/contests/abc156/tasks A - Beginner #include <bits/stdc++.h> #define ll long ...

  9. ubuntu14.04安装mysql5.6.37

    摘抄这篇文档是为了记录自己的日常学习情况,方便以后查看.后边注明了来源,如有不对的地方,希望大家指正,谢谢! 首先从mysql官网上下载所需的离线包,我现在的版本是(mysql-5.6.37-linu ...

  10. Mac启动MongoDB报错:exception in initAndListen: NonExistentPath: Data directory /data/db not found., terminating

    这是主要错误: initAndListen中的异常:NonExistentPath:找不到数据目录/ data / db. 最新版的Mac系统Catalina发生了令人惊讶的更改:它不允许更改根目录( ...