求问ABC376 D
  • 板块灌水区
  • 楼主Luxe877
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/10/19 21:41
  • 上次更新2024/10/19 23:44:04
查看原帖
求问ABC376 D
519986
Luxe877楼主2024/10/19 21:41

赛时写的dfs为什么不能过(AC15 WA24),不就是找大小最小的环吗

#include<bits/stdc++.h>
using namespace std;
int n,m;
struct nd{
	int to,nxt;
}li[400002];
int ind[200002],ptr;
void add(int x,int y)
{
	++ptr;
	li[ptr]=((nd){y,ind[x]});
	ind[x]=ptr;
}
int dfsx[200002],lowx[200002],cnt;
int ans;
bool vis[200002];
void dfs(int x,int dep)
{
	dfsx[x]=dep;
	vis[x]=true;
	for(int i=ind[x];i!=-1;i=li[i].nxt)
	{
		if(!vis[li[i].to])
		{
			vis[li[i].to]=true;
			dfs(li[i].to,dep+1);
		}else{
			if(li[i].to==1)
			{
				ans=min(ans,dep);
			}
		}
	}
//	vis[x]=false;
}
int main()
{
	cin>>n>>m;
	int x,y;
	memset(ind,-1,sizeof(ind));
	for(int i=1;i<=m;i++)
	{
		scanf("%d %d",&x,&y);
		add(x,y);
	}
	ans=0x3f3f3f3f;
	dfs(1,1);
	if(ans>n)
	{
		cout<<"-1";
	}else{
		cout<<ans;
	}
	return 0;
}

2024/10/19 21:41
加载中...