求助90分拓扑排序
  • 板块学术版
  • 楼主liaoyichen
  • 当前回复3
  • 已保存回复3
  • 发布时间2021/9/1 20:18
  • 上次更新2023/11/4 08:10:54
查看原帖
求助90分拓扑排序
486675
liaoyichen楼主2021/9/1 20:18

P2712 摄像头

My Code:

#include<bits/stdc++.h>
using namespace std;
const int N=10001;
queue<int>qu;
int n,m,tot,t;
int a[N],head[N],ver[20*N],nex[20*N],rd[N];
bool vis[5*N];
void add(int x,int y)
{	nex[++tot]=head[x];
	ver[tot]=y;
	head[x]=tot;
}
void tpsort()
{	while(!qu.empty())
	{	t++;
		int x=qu.front();
		qu.pop();
		for(int i=head[x];i;i=nex[i])
		{	int y=ver[i];
			rd[y]--;
			if(vis[y])
			{	if(!rd[y])
				{	qu.push(y);
				}
			}
		}
	}
	if(t==n)
	{	cout<<"YES"<<endl;
	}
	else
	{	cout<<n-t<<endl;
	}
}
int main()
{	cin>>n;
	memset(vis,0,sizeof(vis));
	memset(rd,0,sizeof(rd));
	for(int i=1;i<=n;i++)
	{	int y;
		cin>>a[i];
		vis[a[i]]=1;
		cin>>m;
		for(int i=1;i<=m;i++)
		{	cin>>y;
			//vis[y]=1;
			rd[y]++;
			add(a[i],y);
		}
	}
	for(int i=1;i<=n;i++)
	{	if(!rd[a[i]])
		{	qu.push(a[i]);
		}
	}
	tpsort();
}
2021/9/1 20:18
加载中...