cf1276B
题意简述:给出无向图,会有重边,然后给你两个点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的更多相关文章
- B. Two Fairs 解析(思維、DFS、組合)
Codeforce 1276 B. Two Fairs 解析(思維.DFS.組合) 今天我們來看看CF1276B 題目連結 題目 給一個連通圖,並給兩個點(\(a,b\)),求有多少點對使得:任一路徑 ...
随机推荐
- .NET异步编程之APM模式
目录 1.AMP模式简介 2.使用BeginInvoke实现异步委托 3.原始线程怎么知道新线程已经运行完毕 4.使用AsyncCallback委托实现回调模式 5.源代码下载 shanzm-2020 ...
- 自学Java第三章——《流程控制语句结构》
流程控制语句结构分为: 1.顺序结构:从上到下依次执行 2.分支结构:多个分支选择其中一个分支执行 3.循环结构:重复执行某些代码 3.1 顺序结构 执行过程:从上到下顺序执行 3.1.1 输出语句 ...
- HDU_5602_概率dp
http://acm.hdu.edu.cn/showproblem.php?pid=5602 dp[1][i][j]表示轮到第二个人操作时,第一人总和i,第二人总和j,第一人胜的最小概率(因为每个人都 ...
- 【Java并发工具类】ReadWriteLock
前言 前面介绍过ReentrantLock,它实现的是一种标准的互斥锁:每次最多只有一个线程能持有ReentrantLock.这是一种强硬的加锁规则,在某些场景下会限制并发性导致不必要的抑制性能.互斥 ...
- javascript A*算法 寻路算法 获取最短路径算法
//A算法 自动寻路 路径 class GetAutoPath{ constructor(id, map, sPos, ePos, mapArr){ //this.type = id.type; th ...
- js+css页面横屏
<!DOCTYPE html> <html lang='zh'> <head> <meta charset="utf-8" /> & ...
- Kali Linux初始化
配置SSH 1.将PubKeyAuthtication设置为 yes,同时将注释去除. 2.将PermitRootLogin改为PermitRootLogin yes,同时将注释去除. 3.启动/et ...
- 珠峰-vue
- asp.net core 3.1 入口:Program.cs中的Main函数
本文分析Program.cs 中Main()函数中代码的运行顺序分析asp.net core程序的启动,重点不是剖析源码,而是理清程序开始时执行的顺序.到底用了哪些实例,哪些法方. asp.net c ...
- 00.ES6简介
ES6 简介 ECMAScript 和 JavaScript 的关系 JavaScript是由ECMAScript组织维护的,ES6的名字就取自ECMAScript中的E和S,6的意思是已经发布到第6 ...