我的代码为啥RE了?(必关)
  • 板块灌水区
  • 楼主gw2381
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/11/22 17:09
  • 上次更新2024/11/22 17:13:37
查看原帖
我的代码为啥RE了?(必关)
1279550
gw2381楼主2024/11/22 17:09

P2341

记录: https://www.luogu.com.cn/record/190347110

#include<bits/stdc++.h>
using namespace std;
int dfn[50010],low[50010],n,m,head,top,fa[50010],mem[50010];
vector <int> line[50010];
stack <int> st;
bool vis[50010],online[50010],die[50010];
void dfs(int num)
{
	st.push(num);
	vis[num]=online[num]=true;
	dfn[num]=low[num]=++head;
	int len=line[num].size();
	for(int i=0;i<len;i++)
	{
		int now=line[num][i];
		if(dfn[now]==0)
		{
			dfs(now);
			low[num]=min(low[num],low[now]);
		}
		else
		{
			if(online[now])
			{
				low[num]=min(low[num],low[now]);
			}
		}
	}
	if(dfn[num]==low[num])
	{
		top++;
		int now;
		do
		{
			now=st.top();
			st.pop();
			online[now]=false;
			fa[now]=top;
			mem[top]++;
		}
		while(now!=num);
	}
	return;
}
int main()
{
	scanf("%d%d",&n,&m);
	while(m--)
	{
		int u,v;
		scanf("%d%d",&u,&v);
		line[u].emplace_back(v);
	}
	for(int i=1;i<=n;i++)
	{
		if(vis[i]==false)
		{
			dfs(i);
		}
	}
	for(int i=1;i<=n;i++)
	{
		int len=line[i].size();
		for(int j=0;j<len;j++)
		{
			if(fa[line[i][j]]!=fa[i])
			{
				die[fa[i]]=true;
				break;
			}
		}
	}
	int ans=0;
	bool flag=false;
	for(int i=1;i<=top;i++)
	{
		if(die[i]==false)
		{
			if(flag) return 0,putchar('0');
			flag=true;
			ans=mem[i];
		}
	}
	printf("%d",ans);
}
2024/11/22 17:09
加载中...