天问,0分求调
  • 板块灌水区
  • 楼主mankinds
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/11/26 17:36
  • 上次更新2024/11/26 20:01:19
查看原帖
天问,0分求调
1379970
mankinds楼主2024/11/26 17:36

题目

#include <iostream>
#include <bits/stdc++.h>
using namespace std;
const int N=50001;
int n , m , u , v , low[N] , dfn[N] , tim=0 , fa[N] , ant=0;
vector<int> mp[N];
void tarjan(int u) {
	ant=0;
	low[u]=dfn[u]=++tim;
	for(auto v:mp[u]) {
		if(!dfn[v]) {
			fa[v]=u;
			tarjan(v);
			low[u]=min(low[v],low[u]);
			if(low[v]>dfn[u]) {
				++ant;
			}
		} else if(v!=fa[u]) {
			low[u]=min(low[u],dfn[v]);
		}
	}
}
int main() {
	while(true) {
		cin >> n >> m;
		if(n==0 && m==0){
			return 0;
		}
		for(int i=1; i<=m; i++) {
			cin >> u >> v;
			mp[u].push_back(v);
			mp[v].push_back(u);
		}
		tarjan(1);
		cout << ant << endl;
		memset(low,0,sizeof(low));
		memset(dfn,0,sizeof(dfn));
		memset(mp,0,sizeof(mp));
		tim=0;
		memset(fa,0,sizeof(fa));
	}
	return 0;
}
2024/11/26 17:36
加载中...