若至错误球条,悬1关
查看原帖
若至错误球条,悬1关
764773
AstaVenti_楼主2024/10/5 20:30

rt,样例都能返回一个奇怪的值,完全运行不了

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
vector<int>e[maxn];
void addedge(int u,int v){
	e[u].push_back(v);
	e[v].push_back(u);
}
stack<int>s;//栈,存放答案
int vis[maxn],dfn[maxn],low[maxn],cnt=0,cl[maxn],clnm;
void dfs(int u){
	dfn[u]=low[u]=++cnt;
	s.push(u);
	vis[u]=1;
	for(auto i:e[u]){
		int v=e[u][i];
		if(!dfn[v]){
			dfs(v);
			low[u]=min(low[u],low[v]);
		}else if(vis[v]){
			low[u]=min(low[u],dfn[v]);
		}
	}
	if(low[u]==dfn[u]){
		clnm++;
		while(s.top()!=u){
			int t=s.top();
			cl[t]=clnm,vis[t]=0,s.pop();
		}
		int t=s.top();
		cl[t]=clnm,vis[t]=0,s.pop();
	}
}
int main(){
	int n,m,ans=0;
	cin>>n>>m;
	for(int i=1,u,v;i<=m;i++){
		cin>>u>>v;
		addedge(u,v);
	}
	for(int i=1;i<=n;i++){
		if(!dfn[i])dfs(i);
	}
	for(int i=1;i<=clnm;i++){
		ans+=(cl[i]>1);
	}
	cout<<ans;
}
2024/10/5 20:30
加载中...