求助,只有五十分,自我检查且样例没问题
  • 板块学术版
  • 楼主王子润WZR
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/1/29 14:55
  • 上次更新2024/1/29 15:43:37
查看原帖
求助,只有五十分,自我检查且样例没问题
561470
王子润WZR楼主2024/1/29 14:55
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+1;
vector<int> e[N];
int tim[N],low[N],t=1,sum=0;
bool book[1001];
stack<int> s;
void dfs(int u)
{
	tim[u]=low[u]=t++;
	s.push(u);
	book[u]=1;
	for(int i=0;i<e[u].size();i++)
	{
		if(!tim[e[u][i]])
		{
			dfs(e[u][i]);
			low[u]=min(tim[e[u][i]],low[u]);
		}else if(book[u])
		{
			low[u]=min(tim[e[u][i]],low[u]);
		}
	}
	if(tim[u]==low[u])
	{
		int cnt=0;
		while(s.top()!=u)
		{
			cnt++;
			book[s.top()]=0;
			s.pop();	
		}
		book[s.top()]=0;
		s.pop();
		cnt++;
		if(cnt>1) sum++;
	}
}
int main()
{
	int n,m,u,v;
	cin>>n>>m;
	for(int i=0;i<m;i++)
	{
		cin>>u>>v;
		e[u].push_back(v);
	}
	for(int i=1;i<=n;i++)
	{
		if(!tim[i]) dfs(i);
	}
	cout<<sum;
	return 0;
}
2024/1/29 14:55
加载中...