首页 > 其他分享 >1523:嗅探器

1523:嗅探器

时间:2022-11-26 18:34:54浏览次数:50  
标签:int ans 嗅探器 cin dfn && 1523

找割点,且去掉这个点后 S,T 两个点在2个块中

 

 满足 U!=S && dfn[U] < dfn[T]

 

#include <bits/stdc++.h>
using namespace std ;
 const int N=2e5+2;
 
 vector<int> g[N];
 int n,m,low[N],dfn[N],ans=1e8,pool,S,T;
 
  void dfs(int x) {
      dfn[x]=low[x]=++pool; 
      int y,i;
      for(i=0;i<g[x].size();i++){
           y=g[x][i];
           if(!dfn[y]){
              dfs(y),low[x]=min(low[x],low[y]);
            if(x!=S&&low[y]>=dfn[x]&&dfn[y]<=dfn[T]){
                ans=min(ans,x);
            }    
         }
           else low[x]=min(low[x],dfn[y]);
      }
 }
 void add(int x,int y){
     g[x].push_back(y);
 }
 int main(){
    cin>>n;
    int x,y;
    while(cin>>x>>y,x&&y){
        add(x,y);add(y,x);
    }
    cin>>S>>T;
    dfs(S);
    if(ans==1e8) cout<<"No solution";else cout<<ans;
}

 

标签:int,ans,嗅探器,cin,dfn,&&,1523
From: https://www.cnblogs.com/towboa/p/16927971.html

相关文章

  • CF1523F Favorite Game
    CF1523FFavoriteGame给定\(n\)个传送门和\(m\)个地点。传送门需要提前前往才能打开,你可以不用任何时间传送到任何一个传送门,你可以步行\(1\)个单位\(1\)秒。每......
  • CF1523F Favorite Game
    CF1523FFavoriteGame给定\(n\)个传送门和\(m\)个地点。传送门需要提前前往才能打开,你可以不用任何时间传送到任何一个传送门,你可以步行\(1\)个单位\(1\)秒。每......
  • 做题记录整理图论/tarjan P5058 [ZJOI2004]嗅探器(2022/10/19)
    P5058[ZJOI2004]嗅探器首先,我们应该马上发现它求的和割点非常像,但是是对于两个点而言的割点这时候就需要对tarjan有着比较深入的理解(也可能是我太拉了)如果我们以其中一......
  • 洛谷-P5058 嗅探器
    嗅探器tarjan割点考虑以\(a\)作为根进行一次\(tarjan\)的搜索,会发现只有到\(b\)的路径上的割点才有可能是最终的答案因此考虑一边标记这个路径,一边在这个路径上......