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

今天我們來看看CF1276B

題目連結

題目

給一個連通圖,並給兩個點(\(a,b\)),求有多少點對使得:任一路徑都要經過\(a,b\)這兩點。

想法

首先因為不一定是棵樹,所以總覺得LCA用不到。而這個圖又很大,因此感覺應該是要從\(a,b\)這兩點出發做點事情,例如DFS。

當開始這樣想以後,會發現我們其實可以把所有點分成三種類型:

  1. \(a,b\)都走得到的
  2. 只有\(a\)走得到
  3. 只有\(b\)走得到

這樣最後的點對數量就是2類乘以3類。

實作起來只要從\(a,b\)分別DFS一次,不妨假設我們現在是從\(a\)開始DFS:

那麼只要遇到\(b\)時當前路徑的DFS停下來,這樣那些一定要經過\(b\)才能到的點就不可能訪問到了。

而區分以上三種類型的點,只要維護一個陣列(給每個點一個數字),在從\(a\)開始DFS時,經過的點都加上\(1\);從\(b\)開始DFS時,經過的點都加上\(2\)。以上就可以區分各種點了。

程式碼:

const int _n=2e5+10;
int t,n,m,a,b,u,v,ans[_n],cnt[4];
VI G[_n];
bool vis[_n];
void dfs(int v,int end,int val){
if(v==end)return; vis[v]=1; if(v!=a and v!=b)ans[v]+=val;
rep(i,0,SZ(G[v]))if(!vis[G[v][i]])dfs(G[v][i],end,val);
}
main(void) {cin.tie(0);ios_base::sync_with_stdio(0);
cin>>t;while(t--){
memset(vis,0,sizeof vis); rep(i,1,n+1)G[i].clear();
memset(ans,0,sizeof ans); memset(cnt,0,sizeof cnt);
cin>>n>>m>>a>>b;rep(i,0,m){cin>>u>>v;G[u].pb(v),G[v].pb(u);}
dfs(a,b,1); memset(vis,0,sizeof vis); dfs(b,a,2);
rep(i,1,n+1)cnt[ans[i]]++;
cout<<1ll*cnt[1]*cnt[2]<<'\n';
}
return 0;
}

標頭、模板請點Submission看

Submission

B. Two Fairs 解析(思維、DFS、組合)的更多相关文章

  1. D. Rescue Nibel! 解析(思維、組合、離散化、差分)

    Codeforce 1420 D. Rescue Nibel! 解析(思維.組合.離散化.差分) 今天我們來看看CF1420D 題目連結 題目 給你\(n\)個區間,求有幾種方法使得\(k\)個區間的 ...

  2. D. New Year Santa Network 解析(思維、DFS、組合、樹狀DP)

    Codeforce 500 D. New Year Santa Network 解析(思維.DFS.組合.樹狀DP) 今天我們來看看CF500D 題目連結 題目 給你一棵有邊權的樹,求現在隨機取\(3 ...

  3. D. Maximum Distributed Tree 解析(思維、DFS、組合、貪心、DP)

    Codeforce 1401 D. Maximum Distributed Tree 解析(思維.DFS.組合.貪心.DP) 今天我們來看看CF1401D 題目連結 題目 直接看原題比較清楚,略. 前 ...

  4. B. Kay and Snowflake 解析(思維、DFS、DP、重心)

    Codeforce 685 B. Kay and Snowflake 解析(思維.DFS.DP.重心) 今天我們來看看CF685B 題目連結 題目 給你一棵樹,要求你求出每棵子樹的重心. 前言 完全不 ...

  5. E. Tree Queries 解析(思維、LCA)

    Codeforce 1328 E. Tree Queries 解析(思維.LCA) 今天我們來看看CF1328E 題目連結 題目 給你一棵樹,並且給你\(m\le2e5\)個詢問(包含\(k\)個點) ...

  6. E. Xenia and Tree 解析(思維、重心剖分)

    Codeforce 342 E. Xenia and Tree 解析(思維.重心剖分) 今天我們來看看CF342E 題目連結 題目 給你一棵樹,有兩種操作,把某點標成紅色或者查詢離某點最近的紅點有多遠 ...

  7. B. Nauuo and Circle 解析(思維、DP)

    Codeforce 1172 B. Nauuo and Circle 解析(思維.DP) 今天我們來看看CF1172B 題目連結 題目 略,請直接看原題 前言 第一個該觀察的事情一直想不到,看了解答也 ...

  8. A. Arena of Greed 解析(思維)

    Codeforce 1425 A. Arena of Greed 解析(思維) 今天我們來看看CF1425A 題目連結 題目 略,請直接看原題. 前言 明明是難度1400的題目,但總感覺不是很好寫阿, ...

  9. E. Almost Regular Bracket Sequence 解析(思維)

    Codeforce 1095 E. Almost Regular Bracket Sequence 解析(思維) 今天我們來看看CF1095E 題目連結 題目 給你一個括號序列,求有幾個字元改括號方向 ...

随机推荐

  1. 关于bat脚本中的命令状态码相关的%errorlevel%变量

    bat脚本中常用%errorlevel%表达上一条命令的返回值,即命令执行状态码.也称命令退出码 一般上一条命令的执行结果返回的值只有两种,0和非0 (如常见的1,2,4,5,9009等等),0一般会 ...

  2. 栈帧的内部结构--动态链接 (Dynamic Linking)

    每个栈帧中包含: 局部变量表(Local Variables) 操作数栈(Opreand Stack) 或表达式栈 动态链接 (Dynamic Linking) (或指向运行时常量的方法引用) 动态返 ...

  3. xss利用——BeEF#stage1

    全文概览 简介 BeEF( The Browser Exploitation Framework) 是由Wade Alcorn 在2006年开始创建的,至今还在维护.是由ruby语言开发的专门针对浏览 ...

  4. Spring AOP系列(一)— 代理模式

    Spring AOP系列(一)- 代理模式 AOP(Aspect Oriented Programming)并没有创造或使用新的技术,其底层就是基于代理模式实现.因此我们先来学习一下代理模式. 基本概 ...

  5. python 系统设置

    1. 设置python运行环境为utf-8 import sys #引用sys模块 reload(sys) #重新加载sys sys.setdefaultencoding("utf-8&qu ...

  6. 温故知新————c++ 多态

    参考: 1. https://blog.csdn.net/weixin_42678507/article/details/89414998  (直接说明原理) 2 .https://www.cnblo ...

  7. matlab中set用法

    来源:https://www.cnblogs.com/sddai/p/5467500.html 1.MATLAB给每种对象的每一个属性规定了一个名字,称为属性名,而属性名的取值成为属性值.例如,Lin ...

  8. Sprign-mvc系列之Spring快速入门 什么是sprign-mvc spring-mvc的作用及其基本使用+组件解析+注解解析

    Spring-mvc 什么是SpringMvc SpringMvc是一种基于java的实现Mvc设计模式的请求驱动类型的轻量级web框架,属于SpringFrameWork的后续产品,已经融合在Spr ...

  9. SpringBoot整合Shiro+MD5+Salt+Redis实现认证和动态权限管理(上)----筑基中期

    写在前面 通过前几篇文章的学习,我们从大体上了解了shiro关于认证和授权方面的应用.在接下来的文章当中,我将通过一个demo,带领大家搭建一个SpringBoot整合Shiro的一个项目开发脚手架, ...

  10. 初探电波钟(A Brief Introduction Of Radio Controlled Clock AND Its Appliciations)

    文档标识符:Radio_Controlled_Clock_T-D-P11 作者:DLHC 最后修改日期:2020.10.12 本文链接:https://www.cnblogs.com/DLHC-TEC ...