DFSTLE再求助
查看原帖
DFSTLE再求助
476767
羊叫兽同学楼主2022/5/14 20:54

dfsTLE了。。。。。。

#include<bits/stdc++.h>
using namespace std;
int dfn[1000086],v[1000086];
int v1[1000086],f[1000086],ne[1000086],h[1000086];
int cntttt,top,cntt,cnttt,low[1000086];
void add(int x,int y,int i){
	v1[i]=y;
	ne[i]=h[x];
	h[x]=i; 
}
int n,m,xi;
int qwq[10000086];
bool bpp[1000086],booll[10000086];
int cmp[10000086],ml[1000086];
int fin(){
	int ans=0;
	for(int i=1;i<=xi;i++){
		for(int j=h[cmp[i]];j;j=ne[j])
			if(!booll[v1[j]])ans++;;
	}
	return ans;
}
void dfs(int x)
{
	dfn[x]=low[x]=++cntttt;
	qwq[++cntt]=x;
	v[x]=1;
	for(int i=h[x];i;i=ne[i])
	{
		int vv=v1[i];
		if(!dfn[vv])
		{
			dfs(vv);
			low[x]=min(low[x],low[vv]);
		}
		else
		if(v[vv])
		{
			low[x]=min(low[x],dfn[vv]);
		}
	}
	if(low[x]==dfn[x])
	{
		cnttt++;
		int ui;
		do
		{
			ui=qwq[cntt--];
			v[ui]=0;
			cmp[++xi]=ui;
			booll[ui]=1;
			ml[cnttt]++;
		}while(x!=ui);
		bpp[cnttt]=fin();
		xi=0;
		memset(booll,0,sizeof(booll));
	}
}
int main(){	
	cin>>n>>m;
	for(int i=1;i<=m;i++)
	{
		int x,y;
		cin>>x>>y;
		add(x,y,i);
	}
	for(int i=1;i<=n;i++)
	if(!dfn[i])
		dfs(i);
		int ans=0,anss=0;
	for(int i=1;i<=cnttt;i++){
		if(!bpp[i])
		 ans++,anss=i;
	}
	if(ans==1){
		cout<<ml[anss];
	}
	else
	cout<<0;
}
2022/5/14 20:54
加载中...