CodeForces - 1000E We Need More Bosses

Posted jyyhh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CodeForces - 1000E We Need More Bosses相关的知识,希望对你有一定的参考价值。

题面在这里!

 

    依然一眼题,求出割边之后把图缩成一棵树,然后直接求最长链就行了2333

 

#include<bits/stdc++.h>
#define ll long long
using namespace std;
#define pb push_back
const int N=300005;

vector<int> g[N];
int dfn[N],low[N],num=1,hd[N],n,m,ans=0,v[N];
int to[N*2],ne[N*2],cnt,col[N],mx[N],dc;
bool ban[N*2];

inline void add(int x,int y){ to[++num]=y,ne[num]=hd[x],hd[x]=num;}

void tarjan(int x,int fa){
	dfn[x]=low[x]=++dc;
	
	for(int i=hd[x];i;i=ne[i]) if(to[i]!=fa)
	    if(!dfn[to[i]]){
	    	tarjan(to[i],x);
	    	low[x]=min(low[x],low[to[i]]);
	    	if(low[to[i]]>dfn[x]) ban[i]=ban[i^1]=1;
		}
		else low[x]=min(low[x],dfn[to[i]]);
}

void B(int x){
	col[x]=cnt;
	
	for(int i=hd[x];i;i=ne[i])
	    if(ban[i]){
	    	if(col[to[i]]&&v[to[i]]!=cnt){
	    		v[to[i]]=cnt;
	    		g[cnt].pb(col[to[i]]);
	    		g[col[to[i]]].pb(cnt);
			}
		}
		else if(!col[to[i]]) B(to[i]);
}

void dfs(int x,int fa){
	for(int i:g[x]) if(i!=fa){
		dfs(i,x),ans=max(ans,mx[i]+1+mx[x]);
		mx[x]=max(mx[x],mx[i]+1);
	}
}

int main(){
	scanf("%d%d",&n,&m);
	int uu,vv;
	for(int i=1;i<=m;i++){
		scanf("%d%d",&uu,&vv);
		add(uu,vv),add(vv,uu);
	}
	
	tarjan(1,0);
	
	for(int i=1;i<=n;i++) if(!col[i]){
		cnt++,B(i);
	}
	
	dfs(1,0);
	
	printf("%d
",ans);
	return 0;
}

 

以上是关于CodeForces - 1000E We Need More Bosses的主要内容,如果未能解决你的问题,请参考以下文章

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

CF1000E We Need More Bosses [缩点,直径]

题解 CF1000E We Need More Bosses

CodeForces - 1000E

Codeforces 126B. Password(KMP,DP)

Educational Codeforces Round 46 (Rated for Div. 2)E. We Need More Bosses