后半部分怎么写
查看原帖
后半部分怎么写
1732635
M28_florr楼主2025/6/29 16:36
#include<bits/stdc++.h>
using namespace std;
using i64=long long;
constexpr int inf=1e9;
int main(){
	int n,m;
	cin>>n>>m;
	vector<vector<int> >g(n);
	for(int i=0;i<m;i++){
		int u,v;
		cin>>u>>v;
		--u,--v;
		if(u==v) continue;
		g[u].push_back(v);
		g[v].push_back(u);
	}
	vector<int>dfn(n),low(n),cut(n);
	stack<int>st;
	int T=0,cnt=0;
	vector<vector<int> >bcc(n);
	auto tarjan=[&](auto self,int u)=>void{
		dfn[u]=low[u]=++T;
		st.push(u);
		if(u==rt&&g[u].size()==0){
			bcc[cnt].push_back(u);
			cnt++;
			return;
		}
		int tt=0;
		for(auto v:g[u]){
			if(!dfn[v]){
				self(self,v);
				low[u]=min(low[u],low[v]);
				if(low[v]>=dfn[u]){
					++tt;
					if(u!=rt||tt>1){
						cut[u]=true;
					}
					int x;
					do{
						x=st.top();
						st.pop();
						bcc[cnt].push_back(x);
						ng[x].push_back(n+cnt);
						cnt++;
					}
				}
			}else{
				low[u]=min(low[u],dfn[v]);
			}
		}
	}


}
2025/6/29 16:36
加载中...