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 126B. Password(KMP,DP)
Educational Codeforces Round 46 (Rated for Div. 2)E. We Need More Bosses